Class 的 Kotlin 泛型边界
Kotlin generic bounds for Class
以下泛型无法编译。这里的语义错误是什么?
函数调用
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
使用javaClass<MainActivity>()
代替MainActivity.javaClass
另一个选项:
inline public fun <reified T : Activity> start() {
startActivity(Intent(this, javaClass<T>()))
}
start<MainActivity>()
javaClass
已弃用。改用这个:
val i = Intent(this@Activity, Activity::class.java)
startActivity(i)
对我有用的唯一方法是这样做:
val intent = Intent(this, NextActivity::class.java)
startActivity(intent)
None 的其他解决方案已经奏效,包括使用 javaClass
以下泛型无法编译。这里的语义错误是什么?
函数调用
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
使用javaClass<MainActivity>()
代替MainActivity.javaClass
另一个选项:
inline public fun <reified T : Activity> start() {
startActivity(Intent(this, javaClass<T>()))
}
start<MainActivity>()
javaClass
已弃用。改用这个:
val i = Intent(this@Activity, Activity::class.java)
startActivity(i)
对我有用的唯一方法是这样做:
val intent = Intent(this, NextActivity::class.java)
startActivity(intent)
None 的其他解决方案已经奏效,包括使用 javaClass