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

uscita:instanceof vs isinstance()

false 

Perché è falsa? Sia A.class e a.getClass() non dovrebbero restituire la stessa classe!

E in quali condizioni otterremo il vero dal metodo isInstance()?

risposta

13

perché a.getClass() rendimenti Class<A>, ma you should pass in an A:

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

se si hanno due Class istanze e si desidera controllare la compatibilità assegnazione, allora avete bisogno utilizzare isAssignableFrom():

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

Perché ciò che Il reso a.getClass() ha il tipo Class<? extends A>, non A.

Quali prove A.class.isInstance è se l'oggetto passato ha tipo A.