Kotlin null-safety для свойств класса

Как я могу избежать использования !! для дополнительных свойств класса

 class PostDetailsActivity { private var post: Post? = null fun test() { if (post != null) { postDetailsTitle.text = post.title // Error I have to still force using post!!.title postDetailsTitle.author = post.author Glide.with(this).load(post.featuredImage).into(postDetailsImage) } else { postDetailsTitle.text = "No title" postDetailsTitle.author = "Unknown author" Toast.makeText(this, resources.getText(R.string.post_error), Toast.LENGTH_LONG).show() } } } 

Должен ли я создать локальную переменную? Я думаю используя !! не является хорошей практикой

Вы можете использовать apply:

 fun test() { post.apply { if (this != null) { postDetailsTitle.text = title } else { postDetailsTitle.text = "No title" } } } 

или с:

 fun test() { with(post) { if (this != null) { postDetailsTitle.text = title } else { postDetailsTitle.text = "No title" } } } 

Эта:

 if (post != null) { postDetailsTitle.text = post.title // Error I have to still force using post!!.title } else { postDetailsTitle.text = "No title" } 

Может быть заменено на:

 postDetailsTitle.text = post?.title ?: "No title" 

Если выражение слева от?: Не является нулевым, оператор elvis возвращает его, иначе он возвращает выражение вправо.

Intereting Posts
editText получить текст kotlin Spring boot rest api: как поддерживать как json, так и форму-urlencoded запрос? Интервал Рабочего Планировщика называется слишком нерегулярным Являются ли числовые операции с использованием Kotlin столь же быстрыми, как эквивалент с Java-примитивами? Поток в котлин Класс не найден, пустой набор тестов в androidTest с использованием Android Studio 3.0.1, Room, Kotlin Почему Котлин не выполняет автоматическое литье под давлением? Как получить список всех классов в файле .kt Необходимо получить абсолютный путь к веб-странице с помощью Java Querydsl – результат разделения на два или более объекта Каков самый умный способ скопировать карту в Котлин? Получить значения из файла `.properties` | свойство lateinit не было инициализировано Unity (C #) -> Kotlin <- Coroutines Идиоматический способ вызова методов через отражение в Котлине RxJava 1.x .zip () не работает на RxJava 2.0