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

出力:のinstanceofでisinstance対()

false 

なぜそれが偽のですか? A.classa.getClass()の両方が同じクラスを返してはいけません!

そして、条件はisInstance()の方法から正しいでしょうか?

答えて

13

a.getClass()ので戻りClass<A>が、you should pass in an A

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

あなたは2つのClassのインスタンスを持っていると代入互換性をチェックしたい場合は、あなたがisAssignableFrom()を使用する が必要:

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

何ので、 a.getClass()の返品はAではなくClass<? extends A>となっています。

どのようなA.class.isInstanceは、渡されたオブジェクトがA型であるかどうかをテストします。