我们必须用扩展名.java编写这一行,尽管它的扩展名为.kt我认为Kotlin文件会转换为java文件,但java也会转换为字节代码,因此我们也可以使用.class文件如果Kotlin代码转换进入java代码。
NextActivity::class.java
至 NextActivity::class.kt //not worked
btn?.setOnClickListener {
startActivity(Intent(this, NextActivity::class.java))
}
所以问题是为什么我们在NextActivity::class.java
问题来自here。
答案 0 :(得分:4)
因为您想要访问Java Class的方法。
我认为它们并没有在Kotlin中重新实现,因此,为了访问它们,你必须"反映"你的kotlin类是Java的。
NextActivity::class
返回KClass
引用,KClass
包含property java
,Intent
构造函数签名为Intent(Context packageContext, Class cls)
所以第二个参数是Class
类型所以最后的答案是这不是扩展,这只是属性。
答案 1 :(得分:4)
您正在从Kotlin调用Java代码。 Intent是Android中的Java类。
Doc:https://kotlinlang.org/docs/reference/reflection.html#class-references
请注意,Kotlin类引用与Java类不同 参考。要获取Java类引用,请使用.java属性 一个KClass实例。
您无法将Kotlin类引用传递给Java(在您的情况下为Intent),因此您必须传递Java类引用。
来自互操作文档:https://kotlinlang.org/docs/reference/java-interop.html#java-reflection
Java反射适用于Kotlin类,反之亦然。如上所述 上面,你可以使用instance :: class.java,ClassName :: class.java或 instance.javaClass通过java.lang.Class输入Java反射。