Alerta Coder #4 – instanceof, is y nulos
No es necesario comprobar nulos antes de comprobar una instancia.
Cuando queremos saber si un objeto es una instancia de una clase en concreto, utilizamos instanceof
en Java e is
o !is
en Kotlin. Pero ¿y si el objeto es nulo? Pues no pasa nada porque estas palabras reservadas hacen la comparación solamente si no es nulo. Es decir:
1 2 3 4 |
val texto: String? = null if (texto is String) { texto.replaceAll(",", ".")) } |
Esta operación es segura, ya que si texto es nulo, is devuelve false
.
No obstante, para castings sí que debemos utilizar un casting seguro, y para ello Kotlin nos da el operador de casting seguro as?
, ahorrándonos tener que comprobar si la instancia es nula:
1 2 3 4 5 6 7 8 9 |
open class Deporte(private val jugadores: Int) { fun cuantosJugadores() { println("A este deporte se juega con $jugadores jugadores.") } } class Padel: Deporte(4) val deporte: Deporte = Padel() (deporte as? Padel)?.cuantosJugadores() |
El operador as?
devuelve nulo en caso de que el casting falle (porque la instancia sea nula o no sea del tipo al que se está haciendo casting), por lo que debemos ejecutar la siguiente orden con ?.
, y así no se ejecutará nada si deporte resulta no ser una instancia de Padel
.