Kotlin – 在另一个对象(不是类)中的伴侣对象的替代?

我想在我的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创建这种types的构造并有权访问这些定义而不创建MySingleton实例吗? 答案将是与其他语言中的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)