2011-04-27 92 views
0

在java中我有一個bean對象(類型未知)我想將該成員的值放入一個HashMap以類成員爲關鍵。如果沒有使用反射,我可以這樣做嗎?否則告訴我一個很好的方式使用反射 beanObject =做到這一點{名稱=「拉賈」,年齡=「20」}到haspMapObj = {名稱=「拉賈」,年齡=「20」}在java中我有一個bean對象(類型未知)我想把它的成員放到一個hashmap中

隨着人們你說我試圖introspector: 謝謝你的回答,並建議朋友。

 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我們只傳遞類類型而不是對象引用。我們如何做才能獲得價值?

回答

1

您可以使用Introspector來獲取bean的所有字段及其值。 (此包反射)

0

您可以使用自省,這是基於反射: 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

+0

這是在java 5嗎? – Anbu 2011-04-27 12:09:10

+0

沒問題,這個類已經存在很久了:http://download.oracle.com/javase/1.5.0/docs/api/java/beans/Introspector.html 但是考慮升級到Java SE 6,隨着Java SE 5到達EOL。 – Puce 2011-04-27 12:10:34

+0

看到上述回覆你的答案 – Anbu 2011-04-27 14:08:05

0

我認爲你不能沒有反思就做到這一點。有了反射,你可以做這樣的事情:

Map<String, Field> map = new HashMap<String, Field>(); 
    Field[] fields = object.getClass().getDeclaredFields(); 
    for (Field field : fields) { 
     map.put(field.getName(), field); 
    } 
相關問題