代码之家  ›  专栏  ›  技术社区  ›  Salman Ghumsani

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

  •  6
  • Salman Ghumsani  · 技术社区  · 8 年前

    我们必须用扩展名.java来写这一行,虽然它的扩展名是.kt,但我认为Kotlin文件可以转换成java文件,但java也可以转换成字节码,所以如果Kotlin代码转换成java代码,我们也可以使用.class文件。

    NextActivity::class.java NextActivity::class.kt //not worked

    btn?.setOnClickListener {
       startActivity(Intent(this, NextActivity::class.java))
    }
    

    所以问题是为什么我们在

    问题来自 here

    2 回复  |  直到 8 年前
        1
  •  8
  •   Salman Ghumsani    8 年前

    因为您想访问 Java Class .

    我认为它们不是在Kotlin中从头开始重新实现的,所以为了访问它们,您必须将您的Kotlin类“反射”到Java类。

    NextActivity::class 返回 KClass K类 property java Intent 承包商签名为 Intent(Context packageContext, Class cls) 第二个参数是 Class 键入,以便最终答案为 这不是扩展,这只是属性。

        2
  •  4
  •   Bob    8 年前

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

    请注意,Kotlin类引用与Java类不同 参考要获取Java类引用,请使用上的.Java属性

    您不能将Kotlin类引用传递给Java(在您的例子中是意图),因此您必须传递Java类引用。

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

    在上面,您可以使用实例::类。java,类名::class。java或 例子javaClass通过Java.lang.Class进入Java反射。