2009-07-02 60 views
152

Tôi đang xen kẽ thông qua các lớp trong tệp Jar và muốn tìm những lớp không trừu tượng. Tôi có thể giải quyết điều này bằng cách instantiating các lớp học và bẫy InstantiationException nhưng có một hit hiệu suất như một số lớp học có khởi động nặng. Tôi không thể tìm thấy bất cứ điều gì rõ ràng như isAbstract() trong tài liệu Class.java.Làm cách nào để xác định xem một lớp Java có trừu tượng hay không bằng cách phản chiếu

Trả lời

261

Nó sẽ có trừu tượng như một trong các công cụ sửa đổi của nó khi bạn gọi hàm getModifiers() trên đối tượng lớp.

Điều này link sẽ giúp ích.

Modifier.isAbstract(someClass.getModifiers()); 

Ngoài ra:

http://java.sun.com/javase/6/docs/api/java/lang/reflect/Modifier.html

http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getModifiers()

+1

Cảm ơn! Một lưu ý nhỏ: Bạn không thể sử dụng "class" làm tên biến, có thể bạn muốn thay đổi ví dụ của mình. –

28
Class myClass = myJar.load("classname"); 
bool test = Modifier.isAbstract(myClass.getModifiers()); 
+0

Ngoài ra, những gì seth nói. :) – Stobor

0
public static boolean isInstantiable(Class<?> clz) { 
    if(clz.isPrimitive() || Modifier.isAbstract(clz.getModifiers()) ||clz.isInterface() || clz.isArray() || String.class.getName().equals(clz.getName()) || Integer.class.getName().equals(clz.getName())){ 
     return false; 
    } 
    return true; 
} 
+0

nếu nó là một giao diện và tên lớp là java.util.List bạn có thể sẽ tạo ArrayList –

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