簡體   English   中英

Kotlin-在另一個對象(不是類)內部可以替代伴侶對象嗎?

[英]Kotlin - any substitute for companion object inside of another object (not class)?

我希望在我的Kotlin Android應用程序中具有具有其內部狀態的靜態定義的單例對象。

據我了解,Kotlin中的object用於單例,因此我正在嘗試這種方法:

object MySingleton
{
    public const val _DEF_DEFINITION_NO_ONE: Byte = 1;
    public const val _DEF_DEFINITION_NO_TWO: Byte = 2;
    (...)
}

很好,但是問題是,要能夠使用這些定義,現在我必須首先創建Object的實例。

只是想知道我是否能夠在Kotlin中創建這種構造並無需創建MySingleton實例即可訪問這些定義? 答案將是companion object工作方式與其他語言中的static companion object類似,但不允許在對象內部,而只能在類內部。

當然,我可以保持原樣或將這些定義設為全局,但是想知道是否可以按照我描述的方式進行? 還是應該以其他方式設計這個?

如您所說, MySingleton是一個object ,因此是一個單例 無需創建它的實例(甚至不可能)。 您可以像這樣通過靜態方式簡單地訪問其常量: MySingleton._DEF_DEFINITION_NO_ONE

如果要使用常量而不加object名稱前綴,則只需使用完全限定的名稱導入它們,並按如下所示使用它:

import package.MySingleton._DEF_DEFINITION_NO_ONE
//...
println(_DEF_DEFINITION_NO_ONE)

在Kotlin中有兩種使用靜態數據的方法:

一個object

object ASingleton {
    val CONSTANT_PROPERTY: Int = 1;
}

如果您需要單個實例類,而每個實例類的每個屬性只有一個狀態,請使用單例。 注意:此類只能有一個實例,並且由編譯器為您創建。

具有companion object

class ClassWithCompanionObject{

    val someProperty: Int = 0; // instance bound

    companion object {
        val CONSTANT_PROPERTY: Int = 1;
    }
}

如果您需要一些靜態屬性,而其余的屬性應具有綁定到特定實例的狀態,請使用帶有companion object的類。

用法:

println(ASingleton.CONSTANT_PROPERTY)
println(ClassWithCompanionObject.CONSTANT_PROPERTY)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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