2013-12-17 43 views
1

Java代碼:是否有任何開源庫可以獲取java bean的所有getter值?

class X { 
    private String aaa; 

    String getAaa() { 
     return aaa; 
    } 

    void setAaa(String aaa) { 
     this.aaa = aaa; 
    } 

    public static void main(String[] args) { 
     X x = new X(); 
     x.setAaa("hello"); 

     // how to populate the property names and values from instance 'x'? 
     Map<String, Object> nameAndValues = someUtil.getPropertyNameAndValues(x); 

     // it will be: 
     // aaa -> hello 
    } 
} 

雖然我們可以得到所有的getter方法,並通過反射手動調用它們,我不知道是否有已經提供了該功能的任何開源庫?

回答

1

我想你是從apache commons beanutils尋找BeanUtils.describe(java.lang.Object)。 getter和setter方法必須是public

class X { 
    private String aaa; 

    public String getAaa() { 
     return aaa; 
    } 

    public void setAaa(String aaa) { 
     this.aaa = aaa; 
    } 
} 

參見Properties Java教程 -

Map<String, Object> propertyValueMap = BeanUtils.describe(x); 

但是,如果你滿足的java bean規範這僅適用。

要定義bean類中的屬性,請提供public getter和setter方法。

+0

我試了一下,很奇怪它不提供命名爲「AAA」和值「你好」 – Freewind

+1

@Freewind的干將並且setter不是公開的 –

1

考慮使用apache beanutils

是很自然的,然後直接訪問這些方法,通過調用 相應的getXxx和SetXXX方法。然而,也有一些 場合動態訪問Java對象的屬性(不包括的屬性的getter和setter方法 編譯的知識要 稱呼)需要

2

考慮java.bean包使用Introspector

示例代碼

for (PropertyDescriptor pd: 
    Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors()) 
{ 
     pd.getReadMethod(); 

    } 
+0

+1不使用外部庫 – ThanksForAllTheFish

相關問題