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
Répondre
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()
Class myClass = myJar.load("classname");
bool test = Modifier.isAbstract(myClass.getModifiers());
Aussi, ce que seth a dit. :) – 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;
}
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. –