Instanceof en Java: descubre cómo funciona el operador
El operador Java instanceof se puede usar para verificar la coincidencia de un objeto y una clase y, de esta forma, evitar los mensajes de error. El operador proporciona esta información en forma de sentencia booleana, es decir, “verdadero” o “falso”. Se puede utilizar la comprobación para evitar mensajes de error.
¿Qué es instanceof en Java?
No todas las variables en Java son lo suficientemente específicas como para que se pueda discernir su naturaleza de inmediato. Sobre todo, cuando se utiliza el lenguaje de programación para crear proyectos extensos con un gran número de variables, los datos de entrada, por ejemplo, pueden hacer que una variable al final se muestre como uno de varios objetos. Por esta razón, Java pone a disposición el operador instanceof, el cual permite mostrar si la instancia de una variable de referencia corresponde realmente a una clase, subclase o interfaz. Si es así, el operador devuelve el valor booleano “true”. Si no coincide, la salida es “false” (falso).
Es fundamental, sobre todo antes de convertir un objeto desconocido, realizar una verificación con instanceof de Java. De este modo, se garantiza que el objeto pertenece a la clase asumida. Si se omite esta verificación, puede producirse un ClassCastException, un error que resulta de convertir un objeto en una clase diferente. El mensaje de error puede generar confusión y complicaciones, especialmente en código más largo, por lo que es aconsejable realizar una verificación preventiva.
- Rápido, seguro, flexible y escalable
- Certificado SSL/DDoS incluido
- Dominio y asesor personal incluidos
Funcionalidad y sintaxis
Al ejecutar el operador instanceof en Java, se compara una variable de referencia con una clase específica también indicada. El operador se limita a determinar si hay coincidencia o no, sin incluir más información sobre la naturaleza del objeto o de la clase. La sintaxis es muy sencilla. Muestra el siguiente aspecto:
(objeto) instanceof (clase)
javaSi (objeto)
es una instancia de (clase)
, se muestra “true”. Si no lo es, se muestra “false”.
Ejemplo simple de un operador instanceof en Java
La forma más sencilla de mostrar el funcionamiento de instanceof en Java es con un breve ejemplo. Para ello, primero se crea una clase llamada “Animal”.
public class Animal {
}
javaEn el siguiente paso, se amplía esta clase con una subclase llamada “Gato”.
public class Gato extends Animal {
}
javaAhora puedes utilizar instanceof de Java para comprobar si una instancia de “Gato” pertenece a la clase “Animal”. Para ello, se utilizan las siguientes líneas, que se imprimen con el comando de Java System.out.println
:
public class Animal {}
public class Gato extends Animal {
public static void main(String args []{
Gato Gato = new Gato();
System.out.println(Gato instanceof Animal);
}
}
javaEn la consola, se debería leer lo siguiente:
true
javaMúltiples niveles y la clase objeto
Este principio también funciona con la clase Main y otras subclases. Se muestra en un ejemplo con varios niveles, en el que el operador instanceof de Java se amplía con if-else
. El texto tras las dos barras son comentarios Java que sirven únicamente para aclarar cada paso del proceso, pero que no tienen impacto en el resultado final del código.
// Clase 1
// Superclase
public class Animal {
}
// clase 2
// subclase
class Gato extends Animal {
}
// clase 3
// Clase Main
class Main {
public static void main(String[] args)
Gato Gato1 = new Gato();
if (Gato1 instanceof Gato)
System.out.println ("Gato1 es una instancia de Gato");
else
System.out.println ("Gato1 NO es una instancia de Gato");
if (Gato1 instanceof Animal)
System.out.println ("Gato1 es una instancia de Animal");
else
System.out.println ("Gato1 NO es una instancia de Animal");
if (Gato1 instanceof Object)
System.out.println ("Gato1 es una instancia de Object");
else
System.out.println ("Gato1 NO es una instancia de Object");
}
}
javaEn el ejemplo, se quiere saber si “Gato1” es una instancia de la clase “Gato” y de la superclase “Animal”. En las dos consultas se obtiene “true”. Como Object o la clase “java.lang.Object” está en la parte superior de la jerarquía, “Gatot1” también es una instancia de Object. Por tanto, el operador instanceof de Java siempre mostrará “true” si se utiliza con la clase Object. El resultado final del código se muestra:
Gato1 es una instancia de Gato
Gato1 es una instancia de Animal
Gato1 es una instancia de Object
javaSalida para un valor nulo
Si una variable tiene el valor 0, es decir, no contiene ningún objeto, el operador instanceof de Java muestra “false” automáticamente. En el siguiente ejemplo, lo puedes comprobar:
class Gato {
}
class Main {
public static void main(String[] args)
{
Gato Gato2 = null;
if (Gato2 instanceof Gato)
System.out.println ("Gato2 es una instancia de Gato");
else
System.out.println ("Gato2 NO es una instancia de Gato");
}
}
javaEl resultado final del código se muestra:
Gato2 NO es una instancia de Gato
javaLas superclases no son una instancia de una clase inferior
Mientras que en la jerarquía los objetos de las subclases también pertenecen a las clases superiores, este principio no funciona a la inversa. Se puede ver en el siguiente ejemplo:
class Animal {
}
class Gato extends Animal {
}
class Main {
public static void main(String[] args)
{
Animal Bello = new Animal ();
if (Bello instanceof gato)
System.out.println ("Bello es una instancia de Gato");
else
System.out.println ("Bello NO es una instancia de Gato");
}
}
javaLa salida en este caso es
Bello NO es una instancia de Gato
javaMensaje de error por falta de relación
Si no hay relación entre el objeto y la clase, se muestra un mensaje de error. Para mostrarlo, se crea a continuación una clase llamada “Perro”, que pertenece a la superclase “Animal”, pero no tiene relación con “Gato”.
class Perro implements Animal {
}
class Main {
public static void main(String[] args)
{
Gato Gato3 = new Gato ();
System.out.println (Gato3 instanceof Perro);
}
}
javaEn este caso, recibimos un mensaje de error que indica que no hay conexión entre las clases “Gato”“ y “Perro”. Este mensaje tiene el siguiente aspecto:
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Gato and Perro
javaEn la Digital Guide encontrarás otros tutoriales y artículos sobre Java. Por ejemplo, se incluye un artículo sobre Java y JavaScript o sobre Java y Python. Si quieres saber más sobre operadores Bitwise de Java, tenemos la guía perfecta para ti.