[英]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.