如何访问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文档。