utiliza reservada que para palabra operador objetos getclass example casteo java

java - que - palabra reservada instanceof



¿Hay alguna otra forma que no sea el operador instanceof para la comparación del tipo de objeto en java? (4)

Recuerdo leer en algún libro de Java sobre cualquier operador que no sea ''instancia'' para comparar la jerarquía de tipos entre dos objetos.

instanceof es el más utilizado y común. No puedo recordar claramente si hay otra forma de hacerlo o no.


La instancia de la operación es la mejor opción por dos razones: 1) Maneja la subtipificación, de modo que si tiene una instancia de una subclase / subtipo, seguirá siendo cierto. 2) Maneja nulo, por lo que la instancia nula de Clase devolvería falsa

Si tomas la clase de un objeto y luego lo comparas con otra clase, te arriesgas a tomar la clase de un objeto nulo, y no puedes obtener subtipificación directamente.

Si trabaja con objetos que representan clases, puede usar las operaciones de reflexión, ya que instanceof se referiría a su propia clase, Clase, en lugar de a la clase que representan.


Sí hay. No es un operador sino un método en la clase Class.

Aquí está: isIntance (Object o)

Cita del documento:

... Este método es el equivalente dinámico del operador de instancia de idioma Java

public class Some { public static void main( String [] args ) { if ( Some.class.isInstance( new SubClass() ) ) { System.out.println( "ieap" ); } else { System.out.println( "noup" ); } } } class SubClass extends Some{}


También puede, para mayor reflexión, usar Class.isInstance .

Class<?> stringClass = Class.forName("java.lang.String"); assert stringClass.isInstance("Some string");

Obviamente, si el tipo de la clase se conoce en tiempo de compilación, entonces instanceof sigue siendo la mejor opción.


if ( someClass.isAssignableFrom( obj.getClass() ) )

es equivalente a

if ( obj instanceof Foo )

Use instanceof si la clase a verificar es conocida en tiempo de compilación, use isAssignableFrom si solo se conoce en tiempo de ejecución.