Kotlin是否支持像swift这样的可选构造函数?

Sta*_*ili 3 constructor kotlin swift

我想在Kotlin中使用一个可选的构造函数,它可以创建一个对象或返回null.

这是一个Swift示例,展示了我希望它如何工作:

class Beer {
    init?(yourAge : Int){
        if yourAge < 21 {
            return nil
        }
    }
}
Beer(yourAge: 17) //is nil
Beer(yourAge: 23) //a Beer object
Run Code Online (Sandbox Code Playgroud)

我当然可以把检查放在另一个函数中(下面是Kotlin相当于前面的例子),但它不是很好

class Beer(){
    fun initialize(yourAge : Int): Beer? {
        if (yourAge < 21){
            return null
        }else {
            return Beer()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*zel 6

Kolelin不支持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
Run Code Online (Sandbox Code Playgroud)