На этом шаге мы продолжим рассматривать обработку null.
Возможно, вы захотите представить отсутствие дружелюбия каким-то другим значением, отличным от null. Используйте оператор ?: (объединения по null), чтобы вернуть значение по умолчанию в тех случаях, когда friendshipLevel имеет значение null.
fun main(args: Array<String>) { val adversary = Jhava() println(adversary.utterGreeting()) val friendshipLevel = adversary.determineFriendshipLevel() println(friendshipLevel?.toLowerCase() ?: "It's complicated.") }
Рис.1. Подстановка значения по умолчанию с помощью оператора ?: (Hero.kt)
Запустив Hero.kt, вы увидите сообщение It's complicated.
Рис.2. Результат рабты приложения
Вы использовали @Nullable, чтобы сообщить, что метод может вернуть null. Сообщить, что значение точно не будет null, можно с помощью аннотации @NotNull. Эта замечательная аннотация избавляет пользователя API от беспокойства о том, что возвращаемое значение может быть null. Приветствие монстра Jhava не должно быть null, поэтому добавьте аннотацию @NotNull в заголовок метода utterGreeting().
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class Jhava { @NotNull public String utterGreeting() { return "BLARGH"; } @Nullable public String determineFriendshipLevel() { return null; } }
Рис.3. Указание, что возвращаемое значение не будет null (Jhava.java)
Аннотации @Nullable и @NotNull можно использовать для уточнения контекста возвращаемых значений, параметров и даже полей.
Kotlin обеспечивает разные инструменты для обработки null-значений, включая возможность запрещать обычным типам принимать значение null. Самый распространенный источник ошибок с null-значениями в Kotlin - это взаимодействия с кодом на Java, так что будьте аккуратны, вызывая код Java из Kotllin.
На следующем шаге мы рассмотрим соответствие типов.