Nulls are unavoidable, especially if you work with Java libraries or get data from a database.
But you can check for null the Java way:
// Will return "String" half of the time, and null the other half
val stringOrNull: String? = if (Random().nextBoolean()) "String" else null
// Java-way check
if (stringOrNull != null) {
println(stringOrNull.length)
}
Or in a shorter form, with the Elvis operator. If the length is not null, this operator will return its value. Otherwise, it will return the default value we supplied, zero in this case:
val alwaysLength = stringOrNull?.length ?: 0
println(alwaysLength) // Will print 6 or 0, but never null
If you have a nested object, you can chain those checks:
data class Json(
val User: Profile?
)
data class Profile(val firstName: String?,
val lastName: String?)
val json: Json? = Json...