2010-12-15 60 views
2

Je souhaite obtenir un tableau (ou une liste) des noms de propriété d'un POJO. J'ai essayé commons-beanutil BeanUtils.describe(obj), mais il a besoin d'une instance d'objet. Mais que se passe-t-il si je n'ai que cette classe, sans constructeur public sans arg. Je ne peux pas utiliser clazz.newInstance() pour générer un objet.Comment obtenir les noms de propriété d'une classe pojo sans constructeur public no-arg?

Comment dois-je le résoudre? Y at-il des bibliothèques qui peuvent creuser dans une classe et transmettre des noms de propriété?

(je sais que je peux utiliser la réflexion pour analyser manuellement la structure de classe, mais je suis à la recherche d'une bibliothèque à portée de main)

Merci.

+1

Il est triste qu'il n'y ait pas de surcharge 'BeanUtils.describe (Class)' pour ce faire. Pourquoi ne pas essayer de l'implémenter et de le faire en patch? –

Répondre

3

Je ne l'ai jamais utilisé (ou quoi que ce soit dans java.beans, d'ailleurs), mais java.beans.Introspector.getBeanInfo(Class) peut être ce que vous cherchez.

+0

Merci, il semble qu'il n'y a pas de bibliothèques maniables et java.beans.Introspector est un bon utilitaire pour termine ce travail Merci. – smallufo

4

Java a sa construction en utils de réflexion - que vous pouvez utiliser. Hava un coup d'oeil à la java doc of Class.

Par exemple en utilisant la réflexion Demo.class.getMethods(); pour obtenir toutes les méthodes de lecture d'une classe appelée Demo (sans instancier il.)

List<Method> allGetterMethodsOfClassDemo() = new ArrayList<Method>(); 
for(Method method : Demo.class.getMethods()){ 
    if(method.getName().startsWith("get") || method.getName().startsWith("is")) { 
    allGetterMethodsOfClassDemo.add(method); 
    } 
} 
+0

Vous devrez peut-être ajouter des méthodes * is * pour les types booléens. ;) les getters n'ont pas non plus de paramètres et ne peuvent pas avoir un type de retour de void.class. (ennuyeux, nes pa;) –

+0

@Peter Lawrey: merci pour l'indice, j'ai ajouté le préfixe "est". - Les autres remarques sont justes aussi. – Ralph

+0

Oh et la lettre suivante doit être en majuscule. :(A eu des méthodes comme "Field getable (String)" et "void isolate (String)" –