2012-06-08 22 views
5
class A{ 

    public A(){ 
     System.out.println("in A"); 
    } 
} 

public class SampleClass{ 

    public static void main(String[] args) { 
     A a = new A(); 

     System.out.println(A.class.isInstance(a.getClass())); 
    } 
} 

Salida:instanceof vs isInstance()

false 

¿Por qué es falso? ¡Tanto A.class como a.getClass() no deberían devolver la misma clase!

¿En qué condiciones vamos a cumplir el método isInstance()?

Respuesta

13

Debido a.getClass() vuelve Class<A>, pero you should pass in an A:

System.out.println(A.class.isInstance(a)); 

Si tiene dos Class casos y desea comprobar la compatibilidad de asignación, entonces se necesitan utilizar isAssignableFrom():

System.out.println(A.class.isAssignableFrom(Object.class)); // false 
System.out.println(Object.class.isAssignableFrom(A.class)); // true 
3

Porque lo a.getClass() devuelve tiene tipo Class<? extends A>, no A.

Lo que A.class.isInstance prueba es si el objeto pasado tiene el tipo A.