Kotlin - 另一个对象(不是类)内的伴生对象的任何替代品?

gar*_*bus 2 android design-patterns kotlin

我希望在我的 Kotlin Android 应用程序中拥有带有一些内部状态静态定义的单例对象。

据我了解,object在 Kotlin 中是针对单身人士的,所以我正在尝试这种方法:

object MySingleton
{
    public const val _DEF_DEFINITION_NO_ONE: Byte = 1;
    public const val _DEF_DEFINITION_NO_TWO: Byte = 2;
    (...)
}
Run Code Online (Sandbox Code Playgroud)

这很好,但问题是,为了能够使用这些定义,现在我必须首先创建 Object 的实例。

只是想知道我是否能够在 Kotlin 中创建这种构造并在不创建MySingleton实例的情况下访问这些定义?Answer 的companion object工作方式与static其他语言类似,但不允许在对象内部,只能在类内部。

当然,我可以保持原样或将这些定义设为全局,但想知道是否可以按照我描述的方式进行?或者也许我应该以另一种方式设计它?

Wil*_*zel 6

在 Kotlin 中有两种处理静态数据的方法:

一个 object

object ASingleton {
    val CONSTANT_PROPERTY: Int = 1;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要单个实例类,每个属性只有一个状态,请使用单例。注意:此类只能有一个实例,它是由编译器为您创建的。

一个类 companion object

class ClassWithCompanionObject{

    val someProperty: Int = 0; // instance bound

    companion object {
        val CONSTANT_PROPERTY: Int = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要一些静态属性,而其余的应该具有绑定到某个实例的状态,请使用带有companion object.

用法:

println(ASingleton.CONSTANT_PROPERTY)
println(ClassWithCompanionObject.CONSTANT_PROPERTY)
Run Code Online (Sandbox Code Playgroud)