El instanceof
operador java se utiliza para probar si el objeto es una instancia del tipo especificado (clase, subclase o interfaz).
La instancia de java también se conoce como tipo, comparison operator
ya que compara la instancia con el tipo. Devuelve ya sea true
o false
. Si aplicamos el instanceof
operador con cualquier variable que tenga null
valor, devuelve false
.
Desde JDK 14+ que incluye JEP 305 también podemos hacer "Pattern Matching" parainstanceof
Los patrones básicamente prueban que un valor tiene un cierto tipo y pueden extraer información del valor cuando tiene el tipo correspondiente. La coincidencia de patrones permite una expresión más clara y eficiente de la lógica común en un sistema, es decir, la eliminación condicional de componentes de los objetos.
Antes de Java 14
if (obj instanceof String) {
String str = (String) obj; // need to declare and cast again the object
.. str.contains(..) ..
}else{
str = ....
}
Mejoras de Java 14
if (!(obj instanceof String str)) {
.. str.contains(..) .. // no need to declare str object again with casting
} else {
.. str....
}
También podemos combinar la verificación de tipo y otras condiciones juntas
if (obj instanceof String str && str.length() > 4) {.. str.contains(..) ..}
El uso de la coincidencia de patrones instanceof
debería reducir el número total de conversiones explícitas en los programas Java.
PD : instanceOf
solo coincidirá cuando el objeto no sea nulo, luego solo se le puede asignar str
.