Sto interagendo con le classi in un file Jar e desidero trovare quelle che non sono astratte. Posso risolvere questo istanziando le classi e intrappolando InstantiationException ma questo ha un impatto sulle prestazioni poiché alcune classi hanno un avvio pesante. Non riesco a trovare nulla ovviamente come isAbstract() nei documenti Class.java.Come determinare se una classe Java è astratta per riflessione
risposta
Sarà astratto come uno dei suoi modificatori quando si chiama getModifiers() sull'oggetto classe.
Questo link dovrebbe essere d'aiuto.
Modifier.isAbstract(someClass.getModifiers());
anche:
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()
Class myClass = myJar.load("classname");
bool test = Modifier.isAbstract(myClass.getModifiers());
Inoltre, quello che seth ha detto. :) – Stobor
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;
}
se è un'interfaccia e il nome della classe è java.util.List, come si può creare ArrayList –
Grazie! Una piccola nota: non puoi usare "class" come nome di variabile, forse vuoi cambiare il tuo esempio. –