Як я можу визначити, чи клас Java абстрактний за допомогою відображення


184

Я беру участь у класах у файлі Jar і хочу знайти те, що не є абстрактним. Я можу це вирішити, інстанціюючи класи та захоплюючи InstantiationException, але це є хітом продуктивності, оскільки деякі класи мають важкий запуск. Я не можу знайти нічого, очевидно, як isAb абстракт () в документах Class.java.

Відповіді:


321

Він буде мати абстракт як один із його модифікаторів, коли ви викликаєте getModifiers () на об’єкт класу.

Це посилання має допомогти.

 Modifier.isAbstract( someClass.getModifiers() );

Також:

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
Дякую! Одна маленька примітка: Ви не можете використовувати "class" як ім'я змінної, можливо, ви хочете змінити свій приклад.
Тім Бют

@seth Я думаю, що, Modifier.isAbstract( someClass.class.getModifiers() );можливо, ви хочете це змінити
steven7mwesigwa

Відповідно до звичайних угод про іменування Java, це someClass.getModifiers()або SomeClass.class.getModifiers()деClass<SomeClass> someClass = SomeClass.class;
neXus


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

якщо це інтерфейс і ім'я класу - java.util.List ви можете, як створити ArrayList
Abdushkur Ablimit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.