[英]How to access Kotlin companion object in Java?
我将我的 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
实际上并没有移动到生成方法的位置。 除了伴随对象上的方法之外,它还通过为 Java 生成静态方法来复制它。 我个人认为这不是很好,它可能会根据用例产生一些影响,因此值得了解。
哦,我明白了。 只需使用下面的。
MainApplication application = MainApplication.Companion.get(mContext);
通过省略伴随对象的名称,必须使用名称Companion
来访问方法。
示例:
class MyClass1 {
companion object Object1 {
fun method1 {
}
}
}
class MyClass2 {
companion object {
fun method2 {
}
}
}
要调用第一个伴随对象方法,您将执行以下操作:
MyClass1.method1()
调用第二个:
MyClass2.Companion.method2()
有关详细信息,请参阅关于伴随对象的 Kotlin 文档。
如果在方法调用中使用了new
关键字,您可能会遇到 Java 中无法访问 Companion 对象的方法的问题。 应该省略new
关键字。 该文件指出:
伴生对象及其成员只能通过包含类名访问,而不能通过包含类的实例访问。
因此,如果您有这样的课程:
class MyClass {
companion object {
fun create() {}
}
}
您可以像这样调用伴随对象的方法:
MyClass.create()
但不是这样:
new MyClass.create
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.