我想在Kotlin中使用一个可选的构造函数,该构造函数创建一个对象或返回null。
这是一个Swift例子,展示了我希望它如何工作:
class Beer {
init?(yourAge : Int){
if yourAge < 21 {
return nil
}
}
}
Beer(yourAge: 17) //is nil
Beer(yourAge: 23) //a Beer object
我当然可以将检查放到另一个函数中(下面是上一个示例的Kotlin等效项),但是效果不佳
class Beer(){
fun initialize(yourAge : Int): Beer? {
if (yourAge < 21){
return null
}else {
return Beer()
}
}
}
答案 0 :(得分:5)
Kotlin不像Yole所说的那样支持可选的构造函数,但是您可以通过在同伴对象中定义的invoke运算符来完全实现所需的功能:
class Beer {
companion object {
operator fun invoke(yourAge: Int) = if (yourAge < 21) {
null
} else {
Beer()
}
}
}
Beer(17) // null
Beer(23) // instance of Beer