2011-06-07 15 views
12

¿Cómo puedo comparar 2 clases?Java - ¿Comparando clases?

La siguiente sentencia if no pasa nunca a pesar de clase es el tipo de MiClase:

public void(Class class) { 
    if (class == MyClass.class){ 

    } 
} 
+4

Dudo que se compile en absoluto ... en cambio si solo es un seudocódigo, entonces no veo nada extraño. ¿Puedes pegar el código real? – Cristian

Respuesta

34
if (clazz.equals(MyClass.class)) { 

} 

BTW, clase es una palabra reservada.

+0

'klass' es también un nombre var común. – Soup

+1

'final Class SAN_DIEGO' –

9

Para probar si clazz es un (sub) tipo de MyClass hacer

MyClass.class.isAssignableFrom(clazz) 

Desde el Javadoc para Class.isAssignableFrom

Determina si la clase o interfaz representada por este objeto de clase es el mismo que, o es una superclase o superinterfaz de, la clase o interfaz representada por el parámetro de clase especificado. Devuelve verdadero si es así; de lo contrario, devuelve falso. Si este objeto de clase representa un tipo primitivo, este método devuelve verdadero si el parámetro de clase especificado es exactamente este objeto de clase; de lo contrario, devuelve falso.

Específicamente, este método prueba si el tipo representado por el parámetro Clase especificado se puede convertir al tipo representado por este objeto Clase a través de una conversión de identidad o mediante una conversión de referencia de ampliación. Consulte Especificación del lenguaje Java, secciones 5.1.1 y 5.1.4, para más detalles.

Así

Object.class.isAssignableFrom(String.class) 

es cierto porque cada String es también un Object pero

String.class.isAssignableFrom(Object.class) 

es falso porque no todos los Object s son String s.


El nombre "isAssignableFrom" viene del hecho de que,

Class1 x = (Class2) null; 

sólo es legal cuando

Class1.class.isAssignableFrom(Class2.class) 

Es decir, podemos asignar un campo o variable con tipo estático Class1 un valor que viene de una expresión cuyo tipo estático es Class2.

7

Puede usar == o .equals() para comparar Class objetos.

Ejemplo:

class MyClass 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     MyClass m = new MyClass(); 
     if (MyClass.class == m.getClass()) 
     { 
      System.out.println("it worked"); 
     } 
    } 
} 

Demostración: http://ideone.com/AwbNT

6

Puede utilizar instanceof operador para comprobar si una instancia pertenece a una clase específica o sus subclases.

class MyClass{} 

class SubClass extends MyClass{} 

public static void main(String args[]) { 

    SubClass object = new SubClass(); 

    if (object instanceof MyClass) { 
     System.out.println("It works, too"); 
    } 
}