169 похожих чатов

Здравствуйте. Подскажите пожалуйста по такому вопросу: допустим у меня есть

nullable поле в классе и есть геттер, который в том числе проверяет это поле на null. Далее я хочу обратиться к этому полю после проверки геттера, но смарткаст, разумеется, не происходит, и поле все еще определяется как nullable, хотя я точно знаю, что null там уже нет, поэтому приходится использовать !!. В typescript, например, есть специальные конструкции, применимые к геттерам или методам, которые позволяют произвести смарткаст в таком кейсе, нет ли чего-то подобного в котлин? К сожалению сам не нашел. Спасибо

4 ответов

14 просмотров

А вы точно правильный геттер используете?

var source: Any? = null val nonNull get() = if(source == null) ... else source

геттер всегда возвращает такой же тип (нуллабл в данном случае) , какой у переменной. а сеттер всегда принимает такой же тип.

Ну, примерно так: Шаг 1: лучше не делить поля (которых в общем-то в Котлине нет, поскольку есть только свойства) и геттеры (вещь, которая почти всегда заменима свойствами) Шаг 2: как только мы объединили "поле" и геттер, если у вас новополученное свойство неизменяемо и объявлено в том же модуле, где используется, то при проверке на null будут последующие смарт-касты.

Похожие вопросы

Обсуждают сегодня

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Всем привет. Сейчас я изучаю erlang по книге Erlang and OTP in action. Дошел до главы где реализуется первый gen server на примере tcp rpc сервера. Меня очень сильно смутил ко...
Freezing Death
6
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
Подскажите... Есть ли название у способа разработки кода, в котором: сперва пишут минимальную рабочую структуру: Напр. ввод, обработка, вывод, контроль. Потом эту структуру д...
Budemposmotret
6
В дизассемблере вижу, что строки пихают в регистры через lea, почему так, а не через mov?
Oleg
8
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
Коллеги, а не могли бы вы подсказать, как происходит оптимизация кода при выполнении кода julia? (Точнее, как управлять уровнем оптимизации, аналогично LLVM/GCC). Потому что...
Илья Гаража
5
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Карта сайта