Kotlin – 具有私人构造函数的工厂函数

在Kotlin中,是否可以有一个工厂函数来创建一个具有私有构造函数的类的实例?

我的目标是强制使用工厂函数,并防止通过类的构造函数实例化。

例:

// factory function, valid val myInstance = myClassOf() // class instantiation, invalid val myInstance = MyClass() 

我试图模仿一些像intArrayOf()这样的内置工厂函数的行为,例如

 // works val myIntArray = intArrayOf() // not possible as IntArray has a private constructor val myIntArray = IntArray() 

你可以做这样的事情:

 import MyClass.Companion.myClassOf class MyClass private constructor() { companion object { fun myClassOf() = MyClass() } } //val myInstance1 = MyClass() // not allowed val myInstance2 = myClassOf() 

你可以用这种方式使用伴侣对象 :

 class MyClass private constructor() { companion object { operator fun invoke() = MyClass() } } val myInstance = MyClass() // Calls the factory function invoke() 

如果它具有特殊含义,则命名工厂函数。 例如:

 class MyClass private constructor(values: List) { companion object { fun of(vararg values: String) = MyClass(values.toList()) } } val myInstance = MyClass.of("first", "second")