61
задан 12 March 2019 в 15:41

2 ответа

Kotlin способы обработать пустой указатель

Безопасная Операция Доступа

val dialog : Dialog? = Dialog()
dialog?.dismiss()  // if the dialog will be null,the dismiss call will be omitted

Позволила функции

user?.let {
  //Work with non-null user
  handleNonNullUser(user)
}

Ранний выход

fun handleUser(user : User?) {
  user ?: return //exit the function if user is null
  //Now the compiler knows user is non-null
}

Неизменные тени

var user : User? = null

fun handleUser() {
  val user = user ?: return //Return if null, otherwise create immutable shadow
  //Work with a local, non-null variable named user
}

Значение по умолчанию

fun getUserName(): String {
 //If our nullable reference is not null, use it, otherwise use non-null value 
 return userName ?: "Anonymous"
}

, Использование val вместо var

val только для чтения, var изменяемо. It’s рекомендовал использовать в качестве многих свойств только для чтения, как Вы можете, они быть ориентированными на многопотоковое исполнение.

lateinit

Использования Иногда Вы can’t используют неизменные свойства. Например, это происходит на Android, когда некоторое свойство инициализируется в onCreate() вызов. Для этих ситуаций Kotlin имеет функцию языка, названную lateinit.

private lateinit var mAdapter: RecyclerAdapter<Transaction>

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   mAdapter = RecyclerAdapter(R.layout.item_transaction)
}

fun updateTransactions() {
   mAdapter.notifyDataSetChanged()
}
10
ответ дан 31 October 2019 в 15:15

Дополнение к @Benito Bertoli,

комбинация на самом деле, в отличие от этого, если еще

"test" ?. let {
    println ( "1. it=$it" )
} ?: let {
    println ( "2. it is null!" )
}

результат:

1. it=test

, Но если:

"test" ?. let {
    println ( "1. it=$it" )
    null // finally returns null
} ?: let {
    println ( "2. it is null!" )
}

результат:

1. it=test
2. it is null!

кроме того, если использование elvis сначала:

null ?: let {
    println ( "1. it is null!" )
} ?. let {
    println ( "2. it=$it" )
}

результат:

1. it is null!
2. it=kotlin.Unit
5
ответ дан 31 October 2019 в 15:15

Другие вопросы по тегам:

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