簡體   English   中英

如何在 Java 中訪問 Kotlin 伴侶對象?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM