Поддерживает ли Kotlin дополнительные конструкторы, такие как swift? - PullRequest
0 голосов
/ 11 января 2019

Я хотел бы использовать в Kotlin необязательный конструктор, который либо создает объект, либо возвращает ноль.

Вот пример 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 голосов
/ 11 января 2019

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...