Java – Comparación de clases?

¿Cómo puedo comparar 2 clases?

La sentencia if siguiente nunca pasa aunque class es el tipo de MyClass:

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

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

BTW, la clase es una palabra reservada.

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

 MyClass.class.isAssignableFrom(clazz) 

Desde el javadoc para Class.isAssignableFrom

Determina si la clase o interfaz representada por este objeto de clase es igual 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 false. Si este objeto Class representa un tipo primitivo, este método devuelve true si el parámetro Class especificado es exactamente este objeto Class; De lo contrario devuelve false.

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

Asi que

 Object.class.isAssignableFrom(String.class) 

Es verdadero porque cada String es también un Object pero

 String.class.isAssignableFrom(Object.class) 

Es falso porque no todos los Object son String s.


El nombre " isAssignableFrom " proviene 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 .

Puede utilizar == o .equals() para comparar objetos de Class .

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"); } } } 

Demo: http://ideone.com/AwbNT

Puede utilizar el operador instanceof para comprobar si una instancia pertenece a una clase específica oa 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"); } } 
  • ¿Qué versión JDK (nivel de idioma) es necesaria para Android Studio?
  • Hacer Android BLE (Bluetooth LE) de forma estable
  • Cómo obtener el evento de finalización de llamada en la aplicación para Android
  • Android: Instalación de Wikitude en el emulador de Android
  • Android: ksoap, "UnknownHostException: host no resuelto" dependiendo de la API
  • Android java set image Recurso
  • Búsqueda / filtrado ListView por varios criterios
  • Actualizar variables estáticas en java
  • Problema de análisis de Json (valores cambiados automáticamente flotante)
  • No se puede encontrar el diseñador de interfaz de usuario en el nuevo estudio de Android
  • Android: cómo detectar si la cámara parpadea
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.