Kotlin类的通用界限

时间:2015-01-29 15:37:31

标签: generics kotlin

以下泛型不编译。什么是语义错误?

函数调用

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 个答案:

答案 0 :(得分:4)

javaClass已被弃用。请改用:

val i = Intent(this@Activity, Activity::class.java)
startActivity(i)

答案 1 :(得分:3)

使用javaClass<MainActivity>()代替MainActivity.javaClass

答案 2 :(得分:3)

另一种选择:

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

答案 3 :(得分:1)

它对我有用的唯一方法就是这样做:

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

其他解决方案都没有奏效,包括使用javaClass