【问题标题】:Why does starting a new Android activity in Kotlin require a Java class? [duplicate]为什么在 Kotlin 中启动新的 Android 活动需要 Java 类? [复制]
【发布时间】:2018-09-08 17:53:10
【问题描述】:

如果我想在 Android 中启动一个新的 Activity,我需要将 Activity 传递给一个 Intent。但是,不要像这样传递 Kotlin 类:

val intent: Intent = Intent(this, SearchActivity::class)

我需要像这样将 Kotlin 类作为 Java 类传递:

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

既然我的 SearchActivity 是一个 .kt 文件,为什么我需要添加这个额外的标识符?

【问题讨论】:

    标签: java android android-intent android-activity kotlin


    【解决方案1】:

    您正在使用的Intent 构造函数的第二个参数采用java.lang.Class 对象。 SearchActivity::class 返回 kotlin.reflect.KClass。您可以通过访问its java property 获得java.lang.Class。因此,您最终会发现 SearchActivity::class.java 的语法有些奇怪。

    【讨论】:

      【解决方案2】:

      Here's an explanation.

      基本上,ClassName::class 返回 Kotlin 的 Class 实现,KClass,它不扩展 Java 的 Class。这就是需要::class.java 的原因。 java 是 KClass 中的一个 getter,它返回 KClass 实例的 Java Class 版本。

      查看KClass Reference

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 2020-08-29
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多