2015-01-29 5 views
5

के लिए कोटलिन जेनेरिक सीमाएं निम्नलिखित जेनेरिक संकलित नहीं करती हैं। यहां अर्थपूर्ण रूप से गलत क्या है?कक्षा

समारोह कॉल

start(MainActivity.javaClass) // <== Doesn't compile 

विधि परिभाषा

// Definition 
public fun <T : Activity> start(activityClass: Class<T>) { 
    startActivity(Intent(this, activityClass)) 
} 

कंपाइलर त्रुटि

Error:(43, 9) Type parameter bound for T in fun <T : android.app.Activity> 
start(activityClass: java.lang.Class<T>): kotlin.Unit is not satisfied: 
inferred type com.mobsandgeeks.hellokotlin.MainActivity. 
<class-object-for-MainActivity> is not a subtype of android.app.Activity 

उत्तर

4

javaClass मान्य नहीं है। बजाय इस का उपयोग करें:

val i = Intent([email protected], Activity::class.java) 
startActivity(i) 
3

उपयोग javaClass<MainActivity>()MainActivity.javaClass

+0

धन्यवाद उपयोग, कि काम भी शामिल है। यदि मैं MainActivity.javaClass में पास करना चाहता हूं तो मुझे किस आनुवांशिक प्रकार पैरामीटर का उपयोग करना चाहिए? –

+0

यदि आपका मतलब जावा की 'MainActivity.class' का एनालॉग है, तो Kotlin –

+0

एंड्री में' javaClass () 'का उपयोग करें, यह सही है। मैं पूछना चाहता था, उपरोक्त कोड के संकलन के लिए फ़ंक्शन हस्ताक्षर कैसे बदलें? –

2

एक अन्य विकल्प के बजाय:

inline public fun <reified T : Activity> start() { 
    startActivity(Intent(this, javaClass<T>())) 
} 
start<MainActivity>() 
+0

मुझे यह बेहतर पसंद है और मैं इस +1 का उपयोग करने जा रहा हूं। हालांकि एंड्री का जवाब मेरे प्रश्न के लिए अधिक प्रासंगिक है। –

+0

हाँ, यह सही है। यह उत्तर सिर्फ एक "nicier" विकल्प है – naixx

+0

वास्तव में यह है :) –

1

एक ही तरीका है कि यह मेरे लिए काम किया यह क्या कर रहा है:

val intent = Intent(this, NextActivity::class.java) 
startActivity(intent) 

अन्य समाधान में से कोई भी काम किया है, के javaClass