为什么我们编写NextActivity :: class.java虽然这是一个kotlin类?

时间:2017-08-10 08:46:07

标签: java android kotlin

我们必须用扩展名.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

中编写.java

问题来自here

2 个答案:

答案 0 :(得分:4)

因为您想要访问Java Class的方法。

我认为它们并没有在Kotlin中重新实现,因此,为了访问它们,你必须"反映"你的kotlin类是Java的。

NextActivity::class返回KClass引用,KClass包含property javaIntent构造函数签名为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反射。