2010-12-15 3 views
2

Я хочу получить массив (или список) имен свойств POJO. Я пробовал commons-beanutil's BeanUtils.describe(obj), но ему нужен экземпляр объекта. Но что, если у меня только этот класс, без публичного конструктора no-arg. Я не могу использовать clazz.newInstance() для создания объекта.Как получить имена свойств класса pojo без открытого конструктора no-arg?

Как его решить? Существуют ли библиотеки, которые могут входить в класс и передавать имена свойств?

(я знаю, что я могу использовать отражение вручную разобрать структуру класса, но я ищу для удобной библиотеки)

Спасибо.

+1

Печально, что для этого не существует 'BeanUtils.describe (Class)' overload. Почему бы не попробовать его реализовать и внести в него как патч. –

ответ

3

Я никогда не использовал его (или что-нибудь в java.beans, по этому вопросу), но java.beans.Introspector.getBeanInfo(Class) может быть тем, что вы ищете.

+0

Спасибо, кажется, нет существующих удобных библиотек. И java.beans.Introspector - хорошая утилита для закончите эту работу. – smallufo

4

Java имеет встроенные средства отражения, которые вы можете использовать. Посмотрите на java doc of Class.

Например, используя отражение Demo.class.getMethods();, чтобы получить все методы геттер класса под названием Demo (без instanciating его.)

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

Возможно, вам нужно добавить методы * is * для булевых типов. ;) геттеры также не имеют параметров и не могут иметь возвращаемый тип void.class. (tedious, nes pa;) –

+0

@Peter Lawrey: спасибо за подсказку, я добавил префикс «есть». - Другие замечания правы. – Ralph

+0

О, и следующая буква должна быть в верхнем регистре. :(Были ли такие методы, как «Field getable (String)» и «void isolate (String)» –