如何访问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中是很好的。 但是当MainApplication在Kotlin时,上面的代码错误
Error:(27, 54) error: cannot find symbol method get(Context)
我怎样才能访问我的Java代码上面?
您可以将@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生成静态方法。 就我个人而言,我认为这不是很好,根据用例可能会有一些含义,所以值得了解。
Ops,我明白了。 只需使用下面。
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()
有关详细信息,请参阅Companion对象上的Kotlin文档。