2010-12-15 11 views
2

Ich möchte ein Array (oder eine Liste) von POJO-Eigenschaftsnamen erhalten. Ich habe commons-beanutil's BeanUtils.describe(obj) versucht, aber es benötigt eine Objektinstanz. Aber was, wenn ich nur diese Klasse habe, ohne einen öffentlichen No-Arg-Konstruktor. Ich kann clazz.newInstance() nicht verwenden, um ein Objekt zu generieren.Wie erhalten Sie Eigenschaftsnamen einer POJO-Klasse ohne öffentlichen NO-Arg-Konstruktor?

Wie soll ich es lösen? Gibt es Bibliotheken, die in einer Klasse graben und Eigenschaftsnamen übergeben können?

(Ich weiß, ich Reflektion verwenden kann manuell die Klassenstruktur zu analysieren, aber ich bin auf der Suche für eine handliche Bibliothek)

Dank.

+1

Es ist traurig, dass es keine 'BeanUtils.describe (Class)' Überladung gibt, um dies zu tun. Warum nicht versuchen, es zu implementieren und es als Patch beizusteuern. –

Antwort

3

Ich habe es nie benutzt (oder irgendetwas in java.beans, was das betrifft), aber java.beans.Introspector.getBeanInfo(Class) kann das sein, wonach Sie suchen.

+0

Danke, es scheint, es gibt keine vorhandenen handliche Bibliotheken.Und java.beans.Introspector ist ein gutes Dienstprogramm zu Beende diesen Job, Danke. – smallufo

4

Java hat seine eingebauten Reflektions-Utils - die Sie verwenden können. Hava einen Blick auf die java doc of Class.

Zum Beispiel mithilfe von Reflektion Demo.class.getMethods(); um alle Getter-Methoden einer Klasse erhalten Demo genannt (ohne es zu Instanziierung.)

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

Möglicherweise müssen Sie * is * -Methoden für boolesche Typen hinzufügen. ;) Getter haben auch keine Parameter und können keinen Rückgabewert von void.class haben. (langweilig, nes pa;) –

+0

@Peter Lawrey: Danke für den Hinweis, ich habe das Präfix "ist" hinzugefügt. - Auch die anderen Bemerkungen stimmen. – Ralph

+0

Oh, und der nächste Buchstabe muss groß geschrieben werden. :(. Hatte Methoden wie "Field getable (String)" und "void isolieren (String)" –