2012-06-08 8 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())); 
    } 
} 

wyjściowa:instanceof vs isinstance()

false 

Dlaczego jest fałszywy? Zarówno A.class, jak i a.getClass() nie powinny zwracać tej samej klasy!

W jakim stanie uzyskamy prawidłowość z metody isInstance()?

Odpowiedz

13

ponieważ a.getClass() powraca Class<A>, ale you should pass in an A:

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

Jeśli masz dwie Class instancje i chcesz sprawdzić pod kątem zgodności przyporządkowania, to trzeba używać isAssignableFrom():

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

bo co a.getClass() zwraca typ Class<? extends A>, a nie A.

Co to jest test A.class.isInstance, czy przekazany obiekt ma typ A.