2013-04-25 26 views
8

Tôi cần phải kiểm tra:Java - Làm thế nào tôi có thể kiểm tra nếu một lớp được kế thừa từ một số lớp hoặc giao diện?

public static boolean check(Class<?> c, Class<?> d) 
{ 
    if (/* c inherits from d */) 
     return true; 
    else 
     return false; 
} 

Làm thế nào tôi có thể làm điều đó?

Và điều đó có thể thực hiện được nếu không có c.newInstance()?


Tiêu đề đã sai ở lần đầu tiên. Bây giờ nó là chính xác.

Trả lời

19

Sử dụng isAssignableFrom

if(d.isAssignableFrom(c)){ 
    // then d is a superclass of c 
    // in other words, c inherits d 
} 

Xác định nếu lớp hoặc giao diện đại diện của thành viên này đối tượng Class là một trong hai giống như, hoặc là một lớp cha hoặc superinterface của, lớp hoặc giao diện được đại diện bởi tham số Lớp được chỉ định. Nó trả về true nếu có; nếu không nó sẽ trả về sai. Nếu đối tượng Class này đại diện cho một kiểu nguyên thủy, phương thức này trả về true nếu tham số Class được chỉ định chính xác là đối tượng Class này; nếu không sẽ trả về sai.

Source

1

Làm thế nào về

public boolean isInterface();

Theo tài liệu:

Xác định đối tượng Class quy định đại diện cho một kiểu giao diện. Trả lại: đúng nếu đối tượng này đại diện cho một giao diện; sai khác.

+0

Tại sao bỏ phiếu xuống? Tôi là người đầu tiên đề cập đến 'isInterface' – Apurv

3

Có một phương pháp gọi là Class#isInterface() trong Class

if (c.isInterface()) 
      return true; 
+0

downvoter care để bình luận? – PermGenError

+2

Tôi đã không downvote nhưng suy nghĩ đầu tiên của tôi khi tôi thấy câu trả lời này là làm thế nào nó kiểm tra thừa kế hoặc thực hiện một giao diện cụ thể. Có lẽ câu hỏi đã thay đổi về bạn, nhưng nếu bạn đọc lại nó, OP sẽ tìm cách phát hiện ra nếu một lớp mở rộng một lớp khác hoặc triển khai một giao diện cụ thể. Chú ý 'c thừa kế d' bình luận? –

+1

@KevinBowersox ban đầu tiêu đề câu hỏi là khác nhau. :) – PermGenError

0

bạn đã thử với

c.isInterface()??? 

từ docs

Xác định nếu quy định represe đối tượng Class nts một loại giao diện.

2

Hãy thử này ra

if(c.isAssignableFrom(d)){ 
    return true; 
} else { 
    return false; 
} 
+0

gợi ý đúng nhưng c và d phải được trao đổi 'd.isAssignableFrom (c)'. – Bitterblue

+0

nó sẽ không có ý nghĩa hơn để viết trở lại c.isAssignableFrom (d)? Hay bạn là ông Verbose – Snickers3192

1
if (c.isInterface()) return true; 

isInterface

public boolean isInterface() 

Xác định đối tượng Class quy định đại diện cho một kiểu giao diện. Trả lại: đúng nếu đối tượng này đại diện cho một giao diện; sai khác. sAssignableFrom

public boolean isAssignableFrom(Class<?> cls) 

Xác định nếu lớp hoặc giao diện được đại diện bởi đối tượng Class này là một trong hai giống như, hoặc là một lớp cha hoặc superinterface của, lớp hoặc giao diện được đại diện bởi tham số lớp nhất định. Nó trả về đúng nếu như vậy; nếu không nó sẽ trả về sai. Nếu đối tượng Lớp này đại diện cho một kiểu nguyên thủy, phương thức này trả về true nếu tham số Lớp được chỉ định chính xác là đối tượng Lớp này; nếu không nó sẽ trả về sai.

Cụ thể, phương pháp này kiểm tra xem loại được đại diện bởi tham số Lớp được chỉ định có thể được chuyển đổi thành loại được đại diện bởi đối tượng Lớp này thông qua chuyển đổi nhận dạng hay thông qua chuyển đổi tham chiếu mở rộng. Xem Đặc tả Ngôn ngữ Java, phần 5.1.1 và 5.1.4, để biết chi tiết.

Tham số: cls - đối tượng Class để được kiểm tra Returns: giá trị boolean nêu rõ đối tượng của cls loại có thể được gán cho các đối tượng của lớp này Ném: NullPointerException - nếu tham số lớp quy định là null . Vì: JDK1.1

Các vấn đề liên quan