/ / Kotlin: isAssignableFrom और प्रतिबिंब प्रकार की जाँच - प्रतिबिंब, कोटलिन

कोटलिन: isAssignableFrom और प्रतिबिंब प्रकार चेक - प्रतिबिंब, कोटलिन

कोटलिन (1.0.6) में, प्रतिबिंब के माध्यम से मुझे एक वर्ग के सदस्यों पर पुनरावृति करने की आवश्यकता है (चलो इसे कहते हैं Foo), और वापसी प्रकार के आधार पर कुछ करें। मैं निम्नलिखित लिख सकता हूं, जो काम करता है:

Foo::class.members{ m ->
if(Integer.TYPE.isAssignableFrom(m.returnType.javaType as Class<*>)){
//do something here
} else if ...
}

समस्या यह है कि if बयान (संभाल करने के लिए kotlin.Int) काफी बदसूरत है। क्या कोटलिन में जावा एपीआई पर सीधे भरोसा करने के बिना एक ही परिणाम प्राप्त करने का कोई बेहतर तरीका है?

उत्तर:

उत्तर № 1 के लिए 1

नहीं, वहाँ एक बेहतर तरीका पूर्व 1.1 कोटलिन नहीं है।

आप उपयोग कर सकते हैं Int::class.javaObjectType के बजाय Integer.TYPE का उपयोग करने से बचने के लिए java.lang.Integer कोटलिन कोड में लेकिन यह कथन को और अधिक लंबा बनाता है (हालाँकि अधिक मुहावरेदार)।

Kotlin 1.1 में आप उपयोग कर सकते हैं isSubtypeOf या क्वेरी jvmErasure.allSupertypes सीधे।