fbpx

Instaceof en JAVA

Vídeo explicativo

¿Qué es instanceof en JAVA?

La palabra clave instanceof es una palabra reservada en el lenguaje de programación JAVA que utiliza una operación binaria para determinar si un objecto es de una clase o interfaz especifica. Es decir, gracias a este operador o palabra clave en JAVA podremos determinar si un objecto es un tipo concreto, retornando true o false dependiendo de si el objecto es de el tipo que hemos indicado.

Su sintaxis es la siguiente:

(OBJECTO) instanceof (TIPO)

Ejemplo con instanceof en JAVA

Una vez hemos visto que es y la sintaxis de instanceof en JAVA ahora vamos a hacer un uso práctico para ver cómo se usa para ello vamos a tener unas cuantas clases y interfaces:

Interfaz FormaGeometrica.

public interface FormaGeometrica {}

Una clase Triangulo que implementa FormaGeometrica.

public class Triangulo implements FormaGeometrica {}

Clase TrianguloEquilatero que extiende de Triangulo.

public class TrianguloEquilatero extends Triangulo {}

Si ahora usamos la palabra clave instanceof para verificar si las clases anteriores son de un tipo especifico podríamos hacer lo siguiente:

public class Main {

    public static void main(String[] args) {
        Object objecto = new TrianguloEquilatero();

        if (objecto instanceof FormaGeometrica) {
            System.out.println("El objecto es una forma geometrica");
        }

        if (objecto instanceof Triangulo) {
            System.out.println("El objecto es un triangulo");
        }

        if (objecto instanceof TrianguloEquilatero) {
            System.out.println("El objecto es un triangulo equilatero");
        }
    }
}

El resultado sería el siguiente:

El objecto es una forma geometrica
El objecto es un triangulo
El objecto es un triangulo equilatero

instacenof con un objecto null

Ya hemos visto anteriormente sobre cómo se puede utilizar la palabra clave instanceof para poder usarlo dependiendo de su tipo, pero aquí entra una duda, ¿qué ocurre cuándo nuestro objecto es null? ¿Qué tipo es este? Pues usando instanceof con un objecto null, nos devolverá false.

public class Main {

    public static void main(String[] args) {
        Triangulo objecto = null;

        if (objecto instanceof Triangulo) {
            System.out.println("El objecto es un triangulo");
        } else {
            System.out.println("El objecto no es un triangulo");
        }

    }
}

El resultado imprimido es:

El objecto no es un triangulo

Castear objecto gracias a instanceof

Desgraciadamente en versiones previos a JAVA 14, no era posible utilizar nuestro objecto aunque hayamos asegurado que sea del tipo que hemos verificado gracias a nuestra condición previa gracias a instanceof, por tanto, debemos castear nuestro objecto a el tipo que queremos.

Vemos un ejemplo:

public class Main {

    public static void main(String[] args) {
        Object objecto = new TrianguloEquilatero();

        if (objecto instanceof TrianguloEquilatero) {
            TrianguloEquilatero objectoCasteado = (TrianguloEquilatero) objecto;
            // mas logica
        }
    }
}

instaceof en JAVA 14

Desde Java 14 el problema sobre el casteo del objecto ha sido mejorado y podemos usar directamente un objecto creado por el propio Java con el nombre de la variable que nosotros queramos. Veamos su sintaxis:

(OBJECTO) instanceof (TIPO) (NOMBRE DE VARIABLE)

Y aquí podemos ver un ejemplo diferente al apartado anterior:

public class Main {

    public static void main(String[] args) {
        Object objecto = new TrianguloEquilatero();

        if (objecto instanceof TrianguloEquilatero objectoCasteado) {
            // podemos usar 'objectoCasteado' a partir de ahora como un TrianguloEquilatero
            // mas logica
        }
    }
}