Kotlin是否支持swift等可选构造函数?

时间:2019-01-11 13:55:46

标签: swift kotlin constructor

我想在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()
        }
    }
}

1 个答案:

答案 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