Я полагаю, что вы ошибаетесь.
Нулевые операторы безопасности Kotlin точно преследуют цель заставить вас явно выразить поведение обнуляемости в вашем коде, чтобы радикально минимизировать NPE, или, по крайней мере, убедиться, чтоВы сознательно вызвали их сами :).В вашем (или в любом случае, похожем на MVC-подобном) шаблоне вы сталкиваетесь со следующим сценарием
- Поле может быть пустым как часть полезной нагрузки DTO
- Проверка структуры должна дисквалифицировать DTOесли поле равно нулю.
- Если проверка каркаса прошла успешно, поле DTO неявно считается ненулевым .
Хотя это имеет смысл с точки зрениялогический поток, на самом деле это нарушение, которое может привести к NPE, потому что ничто в модели / контракте не гарантирует, что эти поля не будут нулевыми
Тем не менее, в Java вы только что сделали это окончательное предположение, используягеттер (вы бы в любом случае использовали геттер, это Java, верно?).
Что ж, в kotlin ничего не изменится, если это то, что вам нужно:
data class CustomerDto(@field:NotNull
@JsonProperty("firstName") private val _firstName: String? = null,
@field:NotNull
@JsonProperty("lastName") private val _lastName: String? = null) {
val firstName get() = _firstName!!
val lastName get() = _lastName!!
}
(в этом примере предполагается, что вы используете jackson
для JSON-де / сериализации)
И все же вручную принудительно устанавливая ненулевое значение с помощью оператора !!
(чего вы хотели избежать), теперь вы абстрагируете этот аспект от остальной части вашей кодовой базы, получая поведение, похожее на java-getter *