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)