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
Как «добавить» символ в строку в Котлин «Пустой набор тестов» в чистом модуле kotlin. (Спок / Android) RxJava (Kotlin), Observable.amb и PublishSubject не стреляют освобождение переменной в котлин Заменить setter для переменной, определенной в конструкторе по умолчанию «Java» «не распознается как внутренняя или внешняя команда, программный или командный файл. в Котлине Как установить вкладку BottomNavigationView по умолчанию в Kotlin? почему SomeClass :: class – это KClass <SomeClass>, но this :: class – это KClass <out SomeClass> Jacoco сообщает об 0 охвате классов Kotlin модульными тестами, в Android-проекте Создание самоисполняемой банки с Gradle и Kotlin Преобразование данных с RxJava в Котлине Как создать функцию расширения в Kotlin, которая работает с классом? Прочитайте CSV-строку в Kotlin Android Espresso IntentsMatcher работает на новом устройстве, но не в старом Получить загрузчик классов generics для разбора вложенного поля Parcelable generic