为什么我们编写NextActivity :: class.java,尽管这是一个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

问题出现在这里 。

2 Solutions collect form web for “为什么我们编写NextActivity :: class.java,尽管这是一个kotlin类?”

因为你想访问Java类的方法。

我认为它们并没有在Kotlin中从零开始重新实现,所以为了访问它们,你必须将你的kotlin类“reflection”到Java类。

NextActivity::class返回KClass引用, KClass具有属性 javaIntent构造器签名是Intent(Context packageContext, Class cls)所以第二个参数是Classtypes。所以最终的答案是这不是扩展这只是属性。

您正在从Kotlin调用Java代码。 Intent是Android中的Java类。

文档: https : //kotlinlang.org/docs/reference/reflection.html#class-references

请注意,Kotlin类引用与Java类引用不同。 要获取Java类引用,请在KClass实例上使用.java属性。

你不能将Kotlin类引用传递给Java(你的情况是Intent),所以你必须传递Java类的引用。

从互操作性文档: https : //kotlinlang.org/docs/reference/java-interop.html#java-reflection

Javareflection适用于Kotlin类,反之亦然。 如上所述,您可以使用instance :: class.java,ClassName :: class.java或instance.javaClass通过java.lang.Class输入Javareflection。

  • 如何在不使用HTTP的情况下在KOTLIN android中请求API响应?
  • kotlin项目不能在gradle中构建
  • 在SpringBoot中,Firebase连接在Linux上不起作用
  • 在迭代kotlin时从列表中删除数据
  • Kotlin,如何使用集合函数来简化这段代码
  • 为什么平台types不匹配nonnull对象
  • 键盘在kotlin中打开时如何隐藏底部按钮?
  • 将ByteArrayOutputStream转换为Kotlin中的json
  • 使用Akka java API时Kotlintypes推理编译错误
  • 未解决的参考DaggerApplicationComponent
  • 从Java类inheritance的Kotlin类是否也inheritance自Any?
  • Kotlin language will be the best programming language for Android.