Wie kann ich durch Reflektion feststellen, ob eine Java-Klasse abstrakt ist?

Lesezeit: 1 Minute

Benutzer-Avatar
peter.murray.rust

Ich interagiere durch Klassen in einer Jar-Datei und möchte diejenigen finden, die nicht abstrakt sind. Ich kann dies lösen, indem ich die Klassen instanziiere und InstantiationException abfange, aber das hat einen Leistungseinbruch, da einige Klassen einen starken Start haben. Ich kann in den Class.java-Dokumenten nichts offensichtliches wie isAbstract() finden.

Benutzer-Avatar
seth

Es hat abstract als einen seiner Modifikatoren, wenn Sie getModifiers() für das Klassenobjekt aufrufen.

Dies Verknüpfung sollte helfen.

 Modifier.isAbstract( someClass.getModifiers() );

Ebenfalls:

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

  • Vielen Dank! Eine kleine Anmerkung: Sie können “Klasse” nicht als Variablennamen verwenden, vielleicht möchten Sie Ihr Beispiel ändern.

    – Tim Büthe

    24. November 2010 um 17:07 Uhr

  • @seth Ich denke, es sollte sein Modifier.isAbstract( someClass.class.getModifiers() ); vielleicht möchtest du das ändern

    – steven7mwesigwa

    5. Januar 2019 um 0:36 Uhr


  • Nach den üblichen Java-Namenskonventionen ist es beides someClass.getModifiers() oder SomeClass.class.getModifiers() wo Class<SomeClass> someClass = SomeClass.class;

    – neXus

    23. Januar 2019 um 14:48 Uhr

Benutzer-Avatar
Stobor

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

Benutzer-Avatar
Abduschkur Ablimit

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

  • Wenn es sich um eine Schnittstelle handelt und der Klassenname java.util.List ist, können Sie auch eine ArrayList erstellen

    – Abduschkur Ablimit

    21. Dezember 2017 um 19:47 Uhr

1352870cookie-checkWie kann ich durch Reflektion feststellen, ob eine Java-Klasse abstrakt ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy