Generics 类的Kotlin泛型边界

Generics 类的Kotlin泛型边界,generics,kotlin,Generics,Kotlin,以下泛型不可编译。这里有什么语义错误 函数调用 start(MainActivity.javaClass) // <== Doesn't compile start(MainActivity.javaClass)/使用javaClass()而不是MainActivity.javaClass另一个选项: inline public fun <reified T : Activity> start() { startActivity(Intent(this, javaCl

以下泛型不可编译。这里有什么语义错误

函数调用

start(MainActivity.javaClass) // <== Doesn't compile
start(MainActivity.javaClass)/使用
javaClass()
而不是
MainActivity.javaClass
另一个选项:

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

javaClass
已被弃用。改用这个:

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

对我来说唯一有效的方法就是这样做:

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

其他解决方案都不起作用,包括使用
javaClass

谢谢,这些都起作用了。如果我想传入MainActivity.javaClass,我应该使用什么遗传类型参数?如果你是指Java的
MainActivity.class
,那么在KotlinAndrey中使用
javaClass()
,没错。我想问的是,如何更改要编译的上述代码的函数签名?您可以从
T
中删除
:Activity
绑定,但随后将
MainActivity
的类对象传递给
Intent
,因此,它必须是一个能够处理这个意图的组件。澄清一下:一个类和它的类对象不是通过继承或任何其他类似类型的关系来关联的。类对象与类关联只是为了方便,所以我认为将类对象传递给
start()
没有意义。我更喜欢这个,我将使用+1。然而,安德烈的回答与我的问题更相关。是的,没错。这个答案只是一个“nicier”选项,或者你可以使用
intentFor()
,如果你使用的是anko,基本上是一样的。这个语法在当前Kotlin中已经改变了,你能用
javaClass
将答案更新为
T::class.java
val i = Intent(this@Activity, Activity::class.java)
startActivity(i)
val intent = Intent(this, NextActivity::class.java)
startActivity(intent)