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")
- 在Instant App中应用插件“kotlin-android”会导致“null不能转换为非空types的com.android.build.gradleBasePlugin”
- 当使用Java / Kotlin进行编程时,建议使用尾递归还是迭代版本? 性能有什么不同?
- Kotlin库项目失败的解决方案:[Lkotlin / reflect / KProperty
- Android录像机:未能获得表面
- 投掷任何types的对象时未经检查强制转换? 成kotlin lambda
- 我需要知道为什么? 如果我把这行改为“println(name + two)”错误解决?
- 从expression式中断或返回
- android中的setOnLongClickListener和kotlin
- 在Grails中可以使用Kotlin吗?