В Java у меня есть объект bean (тип неизвестен), я хочу поместить его членов в одну хэш-карту - PullRequest
0 голосов
/ 27 апреля 2011

В Java у меня есть объект bean (тип unknown), я хочу поместить значения членов этого компонента в одну HashMap с членами класса в качестве ключа. Могу ли я сделать это без отражения, если да, то как? иначе скажи мне хороший способ сделать это, используя отражение beanObject = {name = "raja", age = "20"} to haspMapObj = {name = "raja", age = "20"}

Как говорили люди, я попробовал интроспектор: спасибо за ответ и советую друзьям.

     Class myClass =myObj.getClass();
     info = Introspector.getBeanInfo(myClass);
     for ( PropertyDescriptor pd : info.getPropertyDescriptors() ){
       String name = pd.getName();
       System.out.println("*************"+name+","+ pd.getValue(name));
     }

, но приведенное выше - это печать только имени, значение которого равно нулю. bcoz мы передаем только тип класса, а не ссылку на объект. Как мы можем получить значение?

Ответы [ 4 ]

1 голос
/ 27 апреля 2011

Вы можете использовать Introspector , чтобы получить все поля компонента и их значения.(Это оборачивает отражение)

0 голосов
/ 27 апреля 2011

Я думаю, что вы не можете сделать это без отражения. С отражением вы можете сделать что-то вроде этого:

    Map<String, Field> map = new HashMap<String, Field>();
    Field[] fields = object.getClass().getDeclaredFields();
    for (Field field : fields) {
        map.put(field.getName(), field);
    }
0 голосов
/ 27 апреля 2011

Я не вижу возможности без использования отражения хотя бы косвенно через фреймворки.

Если вы посмотрите на Beanutils Apache Commons, вы можете найти несколько полезных методов:

http://commons.apache.org/beanutils/

Больше уточняется:

http://commons.apache.org/beanutils/v1.8.3/apidocs/org/apache/commons/beanutils/BeanMap.html

С наилучшими пожеланиями!

0 голосов
/ 27 апреля 2011

Вы можете использовать самоанализ, который основан на рефлексии: http://download.oracle.com/javase/6/docs/api/java/beans/Introspector.html

Но что именно вы хотите сделать в конце? Может быть, есть лучший способ ...

Чтобы получить значение из PropertyDescriptor pd:

Object value = pd.getReadMethod().invoke(myObj, new Object[]{});

Обратите внимание, некоторое время назад я написал служебный класс, который может оказаться полезным:

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/beans/BeanIntrospector.html

...