Làm cách nào để xác định xem một lớp Java có trừu tượng không bằng phản chiếu


183

Tôi đang xen kẽ qua các lớp trong một tệp Jar và muốn tìm những thứ không trừu tượng. Tôi có thể giải quyết điều này bằng cách khởi tạo các lớp và bẫy InstantiationException nhưng điều đó có hiệu năng khi một số lớp 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ư is Ab. () Trong các tài liệu Class.java.

Câu trả lời:


320

Nó sẽ có bản tóm tắt như một trong những sửa đổi của nó khi bạn gọi getModifier () trên đối tượng lớp.

Liên kết này sẽ giúp.

 Modifier.isAbstract( someClass.getModifiers() );

Cũng thế:

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#getModifier ()


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

@seth Tôi nghĩ Modifier.isAbstract( someClass.class.getModifiers() );có lẽ bạn muốn thay đổi điều đó
steven7mwesigwa

Theo các quy ước đặt tên Java thông thường, nó là một trong hai someClass.getModifiers()hoặc SomeClass.class.getModifiers()ở đâuClass<SomeClass> someClass = SomeClass.class;
neXus

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

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

1
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;
}

nếu đó là một giao diện và tên lớp là java.util. Bạn có thể sẽ tạo ArrayList
Abdushkur Ablimit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.