java - 如何在 Java 中访问 Kotlin 伴随对象?

我将我的一个 Java 类转换为 Kotlin 和下面的类。

class MainApplication : Application() {
    companion object {
        operator fun get(context: Context): MainApplication {
            return context.applicationContext as MainApplication
        }
    }
}

它有一个静态函数get

我还有一个 Java 函数可以访问它。

MainApplication application = MainApplication.get(mContext);

当 MainApplication 是 Java 时很好。但是Kotlin中MainApplication的时候不行,上面的代码报错

Error:(27, 54) error: cannot find symbol method get(Context)

如何在上面的 Java 代码中访问 get

最佳答案

您可以添加@JvmStatic对伴随对象中的方法进行注解,使 Kotlin 生成静态方法。

class MainApplication : Application() {
    companion object {
        @JvmStatic fun get(context: Context): MainApplication {
            return context.applicationContext as MainApplication
        }
    }
}

然后您可以像在转换为 Kotlin 之前一样从 Java 访问它:

MainApplication application = MainApplication.get(mContext);

编辑:我觉得有必要添加一些我最近学到的东西:@JvmStatic 实际上并没有move 生成方法的位置。除了伴生对象上的方法之外,它还通过为 Java 生成静态方法来复制它。我个人认为这不是很好,它可能会根据用例产生一些影响,所以值得了解。

https://stackoverflow.com/questions/38120494/

相关文章:

kotlin - 从 Kotlin 中的密封类扩展数据类

android - kotlin 中的重载解析歧义错误

android - Kotlin 错误 : Dagger does not support inje

android - 使用 Kotlin 关闭/隐藏 Android 软键盘

kotlin - 从 lambdas 或 Kotlin : 'return' is not allo

android - 从 Activity Kotlin 中获取额外的字符串

android - 使用 Kotlin 组合整数标志的最佳方法?

string - 为什么 Kotlin 中 null + null 的类型是隐式 String?

kotlin - 如何在一行上声明多个属性

kotlin - 做任何==对象