Java-код в вопросе реализует свойство, значение которого не может быть нулевым, но установщик которого допускает нулевое значение (преобразуя его в значение по умолчанию).(Java не имеет прямой поддержки свойств, поэтому вы должны вручную кодировать поле, геттер и сеттер.)
На самом деле это не идиоматический эквивалент Котлина.Прямой перевод будет выглядеть так:
class Item {
var text: String = ""
set(value) { field = value ?: "" }
}
Это объявляет необнуляемое свойство со значением по умолчанию.(Как и все свойства Kotlin, его поле является закрытым; у него также есть метод getter и - потому что это var
- метод setter, оба из которых являются публичными, потому что никакой другой видимости не было указано.) И он переопределяет setter кзамените значение по умолчанию, если передано null
.
Если вызывается из кода Java, то я думаю, выше, будет обрабатывать его, как ожидалось.(Я не проверял это.)
Но поскольку компилятор Kotlin знает, что поле не имеет значения NULL, он не позволил бы вам вызвать метод установки с нулевым значением в первую очередь;в этом его отличие от версии Java.
Так что, если бы он вызывался только из другого кода Kotlin, ?: ""
никогда бы не использовался, и поэтому установщик не должен был бы быть переопределен.Самый естественный перевод на Kotlin был бы просто:
class Item {
var text: String = ""
}