Различные способы обработки типа Nullable в Kotlin
Исходное сообщение можно купить в Середина
Мы все знаем, как Kotlin справляется с «ошибкой на миллиард долларов», присутствующей в Java, улучшая способ обработки исключений нулевого указателя (NPE). Изучая различные возможные способы эффективной работы с NPE, я читал различные сообщения в блогах и документацию по Kotlin. К моему удивлению, многие разработчики Android думают, что либо Koltin удалил NPE, либо справляется с этим самостоятельно. Что именно говорит Котлин: Нули в Котлине не существуют, пока вы не скажете’, то есть никакая переменная по умолчанию не имеет значения.
Мы просто различаем типы объектов Null и Non-Null в Kotlin и должны явно обрабатывать их, как мы делали это с переменной в Java.
Kotlin по умолчанию принудительно инициализирует каждый объект значением, которое не должно быть нулевым.var showButton: Button = null // Compile Time Error
Однако мы можем создать объект типа, допускающий значение null, явно сообщив Kotlin, что объект может быть нулевым.var showButton: Button? = null // No Compile Time Error
При использовании типа, допускающего значение NULL, операция безопасного доступа
?.
или ненулевое утверждение!!
операторы должны использоваться для доступа к переменной, допускающей значение NULL.
В этом случае, если x
является нулевойто выражение вернется нулевой также. Так y
будет типа Double?
. Могут быть случаи, когда вы знаете, что ваш объект не может быть нулевым, тогда мы используем оператор Not Null!! чтобы утверждать, что объект точно не является нулевым и, следовательно, избегает нулевой проверки. (Я предлагаю использовать это редко, так как если вы используете этот оператор, вы на самом деле делаете то же самое, что мы делали в Java)
Оператор ненулевого утверждения (!!
) преобразует любое значение в ненулевой тип и выдает исключение, если значение равно null. Мы можем написать x!!
и это вернет ненулевое значение x
или бросить NPE, если x
нулевой.
Kotlin’s requireNotNull() vs Not Null Assertion !!
Kotlin предоставляет два метода для вызова объектов с нулевым типом — requireNotNull() и !! оператор. Оба выдают исключение, если объект имеет значение null. Когда я наткнулся на эти два метода, мне было любопытно узнать, в чем разница между ними. Вот что я узнал:x!!
генерирует исключение нулевого указателя, если x является нулевым объектом и requireNotNull(x)
выдает исключение IllegalArguementException, если x равно null.
Кроме того, Objects.requireNotNull() доступен с Java в Android, но только с последними версиями API. Использование каждого из них в правильном месте помогает лучше отлаживать код.
Следуй за мной на Твиттер , Фейсбук или же LinkedIn опубликую обновление, когда я напишу новые сообщения.