मैं createInstance() का उपयोग करने में असमर्थ हूं। उदाहरण के लिए, Foo::class.createInstance()

मेरे पास कोटलिन 1.3.70 kotlin("jvm") version "1.3.70" प्लगइन का उपयोग करके एक ग्रेडल प्रोजेक्ट है। और मेरी निर्भरता में implementation(kotlin("stdlib-jdk8")) और implementation(kotlin("reflect")) हैं।

क्या किसी को पता है कि यह फ़ंक्शन गायब क्यों प्रतीत होता है?

मेरे पास एक ऐसा फ़ंक्शन है जो classType: KClass<Foo> प्राप्त करता है और मैं नोर्ग कन्स्ट्रक्टर का उपयोग करके Foo का उदाहरण बनाना चाहता हूं।

0
user2211907 23 अप्रैल 2020, 22:00
आपको कोटलिन क्लास इंस्टेंस के बजाय जावा क्लास इंस्टेंस की आवश्यकता है: kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/java-class.html
 – 
PiRocks
23 अप्रैल 2020, 22:07
1
क्या आप वाकई createInstance() ढूंढ रहे हैं?
 – 
Tenfour04
23 अप्रैल 2020, 22:08
उफ़ हाँ, यही मेरा मतलब था कि जब मैंने पोस्ट लिखा था तो मैंने बस एक गलती की थी।
 – 
user2211907
24 अप्रैल 2020, 00:02

2 जवाब

सबसे बढ़िया उत्तर

मैंने कोटलिन प्लगइन संस्करण को अपडेट किया और ग्रेडल कैश द्वारा हटा दिया गया और अब यह काम कर रहा है।

0
user2211907user2211907 24 अप्रैल 2020, 01:12

जावा प्रतिबिंब (जैसे newInstance()) का उपयोग करने के लिए आपको संबंधित एक्सेस करना होगा जावा वर्ग:

fun createInstance(classType: KClass<Foo>): Foo = classType.java.newInstance()

लेकिन कोटलिन createInstance() प्रदान करता है। उस उपयोग के मामले के लिए बेहतर विकल्प के रूप में:

क्लास का एक नया इंस्टेंस बनाता है, एक कंस्ट्रक्टर को कॉल करता है जिसमें या तो कोई पैरामीटर नहीं होता है या सभी पैरामीटर वैकल्पिक होते हैं।

fun createInstance(classType: KClass<Foo>): Foo = classType.createInstance()
0
Marvin 23 अप्रैल 2020, 22:20
गलती के लिए क्षमा करें, मेरी मूल पोस्ट का मतलब यह पूछना था कि मैं createInstance() का उपयोग क्यों नहीं कर सका, मैंने गलती से getInstance() लिखा था
 – 
user2211907
24 अप्रैल 2020, 00:04
और इसका मतलब... क्या? क्षमा करें, अब मुझे समझ नहीं आ रहा है कि आपका वास्तविक प्रश्न क्या है।
 – 
Marvin
24 अप्रैल 2020, 00:36