2009-07-02 15 views
152

Interesuję się klasami w pliku Jar i chcę znaleźć te, które nie są abstrakcyjne. Mogę rozwiązać ten problem przez tworzenie instancji klas i wychwytywanie wyjątku InstantiationException, ale ma to działanie, ponieważ niektóre klasy mają ciężki start. Nie mogę znaleźć niczego, oczywiście jak isAbstract() w dokumentacji Class.java.Jak określić, czy klasa Java jest abstrakcyjna przez odbicie

Odpowiedz

261

Będzie zawierać abstrakcję jako jeden ze swoich modyfikatorów, gdy wywołasz metodę getModifiers() na obiekcie klasy.

Ta pomocna może być ta link.

Modifier.isAbstract(someClass.getModifiers()); 

również:

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

Dzięki! Jedna mała uwaga: nie możesz użyć "class" jako nazwy zmiennej, może chcesz zmienić swój przykład. –

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

Ponadto, co powiedział seth. :) – 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

jeśli jest to interfejs, a nazwa klasy to java.util.List, możesz utworzyć ArrayList –

Powiązane problemy