2015-01-29 32 views
5

Aşağıdaki jenerikler derlenmez. Burada anlamsal olarak yanlış olan nedir?Kotlin sınıf sınırları için genel sınırları

Fonksiyon çağrısı

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

Yöntem Tanımı

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

derleyici hata

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 

cevap

4

javaClass kullanımdan kaldırıldı. Bunu kullan: o benim için çalıştı

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

Kullanım javaClass<MainActivity>() yerine MainActivity.javaClass

+0

teşekkür kullanımı da dahil olmak üzere. MainActivity.javaClass içinde geçmek istiyorsam hangi genetik tip parametresini kullanmalıyım? –

+0

Eğer Java'nın 'MainActivity.class' analogunu kastediyorsanız, o zaman Kotlin –

+0

Andrey' javaClass () 'yi kullanın, doğru. Ben derlemek için yukarıda belirtilen kod için işlev imzası nasıl değiştirileceğini sormak istedim? –

2

Başka seçeneğin:

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

Bunu daha çok beğendim ve bunu +1 kullanacağım. Ancak Andrey'nin cevabı sorumu ile daha alakalı. –

+0

Evet, doğru. Bu cevap sadece bir "nicier" seçeneğidir. – naixx

+0

Gerçekten de –

1

tek yolu bunu yapıyor: diğer çözümlerin

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

Yok çalışmış, çalışmış javaClass

İlgili konular