Je suis interactif à travers les classes dans un fichier Jar et souhaite trouver celles qui ne sont pas abstraites. Je peux résoudre cela en instanciant les classes et en piégeant InstantiationException, mais cela a un impact sur les performances car certaines classes ont un démarrage important. Je ne peux rien trouver comme isAbstract() dans les docs Class.java.Comment puis-je déterminer si une classe Java est abstraite par réflexion
152
A
Répondre
261
Il aura abstrait comme l'un de ses modificateurs lorsque vous appelez getModifiers() sur l'objet de classe.
Cette link devrait aider.
Modifier.isAbstract(someClass.getModifiers());
aussi:
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()
28
Class myClass = myJar.load("classname");
bool test = Modifier.isAbstract(myClass.getModifiers());
+0
Aussi, ce que seth a dit. :) – 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
si c'est une interface et que le nom de la classe est java.util.List, vous pouvez créer une ArrayList –
Merci! Une petite note: Vous ne pouvez pas utiliser "class" comme nom de variable, peut-être que vous voulez changer votre exemple. –