2012-04-15 28 views
88

Làm cách nào để kiểm tra xem một số lớp có triển khai giao diện không? Khi có:Làm thế nào để kiểm tra xem một đối tượng có thực hiện một giao diện không?

Character.Gorgon gor = new Character.Gorgon();

làm thế nào để kiểm tra xem gor thực hiện giao diện Monster?

public interface Monster { 

    public int getLevel(); 

    public int level = 1; 
} 

public class Character { 
    public static class Gorgon extends Character implements Monster { 
     public int level; 
     @Override 
     public int getLevel() { return level; } 

     public Gorgon() { 
      type = "Gorgon"; 
     } 
    } 
} 

là phương pháp ghi đè getLevel() trong Gorgon một cách chính xác, vì vậy nó có thể trở lại level mới gor tạo?

+0

Tôi nghĩ rằng bạn cần từ khóa instanceof. –

Trả lời

165

Ví dụ một

Character.Gorgon gor = new Character.Gorgon(); 

Sau đó làm

gor instanceof Monster 

Đối với một trường hợp lớp làm

Class<?> clazz = Character.Gorgon.class; 
Monster.class.isAssignableFrom(clazz); 
+0

Làm thế nào về tham số phương thức 'public void doSomething ([Object thực thi Serializable] param)'? Cú pháp đúng cho điều đó là gì? –

+0

Yeh, '... isAssignableFrom()', cách duy nhất để xác định Gorgonite là quái vật. –

31

Sử dụng

if (gor instanceof Monster) { 
    //... 
} 
1

Nếu bạn muốn một phương pháp như public void doSomething([Object implements Serializable]) bạn chỉ có thể nhập nó như thế này public void doSomething(Serializable serializableObject). Bây giờ bạn có thể vượt qua nó bất kỳ đối tượng nào thực hiện Serializable nhưng sử dụng serializableObject bạn chỉ có quyền truy cập vào các phương thức được thực hiện trong đối tượng từ giao diện Serializable.

7

Nói chung cho AnInterfaceanInstance của bất kỳ lớp:

AnInterface.class.isAssignableFrom(anInstance.getClass()); 
Các vấn đề liên quan