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

Output:instanceof vs isinstance()

false 

Tại sao nó sai? Cả hai A.classa.getClass() không được trả lại cùng một lớp!

Và trong điều kiện nào chúng tôi sẽ nhận được sự thật từ phương pháp isInstance()?

Trả lời

13

a.getClass() lợi nhuận Class<A>, nhưng you should pass in an A:

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

Nếu bạn có hai Class trường và muốn kiểm tra khả năng tương thích chuyển nhượng, sau đó bạn cần sử dụng isAssignableFrom():

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

Bởi vì những gì Các khoản thanh toán a.getClass() có loại Class<? extends A>, không phải là A.

Bài kiểm tra A.class.isInstance là liệu đối tượng được truyền có loại A hay không.