2016-12-18 11 views
5

मैंने Array<*> के KClass प्राप्त करने के लिए नीचे दिया गया कोड लिखा था।ऐरे के KClass कैसे प्राप्त करें?

Array::class 

हालांकि, इस कोड में एक संकलन त्रुटि है।

Kotlin: सरणी वर्ग शाब्दिक एक प्रकार तर्क की आवश्यकता है,

आप कारण या समाधान जानते हैं कोण कोष्ठक में एक निर्दिष्ट करें?

उत्तर

8

JVM मंच पर, Kotlin Array<T> typesJava arrays है, जो, जावा सामान्य प्रकार के विपरीत, type erasure के अधीन नहीं हैं पर मैप किए जाते हैं, वे reified बजाय कर रहे हैं।

इसका मतलब है कि, अन्य तत्वों के साथ, विभिन्न तत्वों के साथ सरणी अलग-अलग वर्गों द्वारा प्रदर्शित की जाती हैं, जिनमें अलग-अलग Class<T> टोकन होते हैं, और इन वर्ग टोकन में तत्व प्रकार के बारे में भी जानकारी होती है। जेनेरिक सरणी प्रकार नहीं है, लेकिन विभिन्न तत्व प्रकारों के साथ सरणी के लिए केवल सरणी प्रकार हैं।

के बाद से सामान्यArray<T> मौजूद नहीं है, तो आप अपने प्रतिबिंब या तो उपयोग नहीं कर सकते, तो आप केवल निर्दिष्ट तत्व प्रकार के साथ सरणी प्रकार के क्रम प्रकार की जानकारी प्राप्त कर सकते हैं:

val c = Array<Int>::class // corresponds to Java Integer[] type 
val d = Array<Array<String>>::class // corresponds to Java String[][] 

val e = IntArray::class // corresponds to Java int[] 

आप जांच करने के लिए की जरूरत है एक मनमानी वर्ग एक सरणी प्रकार है, आप इसे जावा प्रतिबिंब के साथ कर सकते हैं:

val c = Array<Int>::class 

println(c.java.isArray) // true 
संबंधित मुद्दे