2009-06-24 84 views
12

我有一個獲取POJO的方法,因爲它的參數。現在我想以編程方式獲取POJO的所有屬性(因爲我的代碼在運行時可能不知道它中的所有屬性),並且還需要獲取這些屬性的值。最後,我將形成POJO的字符串表示形式。如何使用BeanUtils introspection獲取Java對象的所有屬性的列表?

我可以使用ToStringBuilder,但我想建立我的輸出字符串在特定於我的要求特定的格式。

是否有可能在Beanutils中這樣做!如果是,任何指向方法名稱的指針?如果不是,我應該寫我自己的反射代碼嗎?

+0

您可以使用ToStringStyle,是具有predifined風格 DEFAULT_STYLE:默認的toString風格。 MULTI_LINE_STYLE:多行toString樣式。 NO_FIELD_NAMES_STYLE:無字段名稱toString樣式。 SHORT_PREFIX_STYLE:短前綴toString風格。 SIMPLE_STYLE:簡單的toString樣式。 看看有沒有這些可以解決你的目的 – 2009-06-24 13:38:54

回答

9

你試過ReflectionToStringBuilder?它看起來應該做你所描述的。

+0

是的。它給了我POJO的字符串表示。但是,我希望字符串格式具有不同的風格。例如,我不希望[email protected] [name = foo,desc = bar],而是希望字符串是「[name = foo; desc = bar;]」 – Veera 2009-06-24 13:40:55

+0

也許這個版本:http:// commons.apache.org/lang/api-release/org/apache/commons/lang/builder/ReflectionToStringBuilder.html#toString(java.lang.Object,%20org.apache.commons.lang.builder.ToStringStyle) – 2009-06-24 15:47:19

3

使用反射獲取所有屬性/變量(只是名稱)。現在使用getProperty方法得到該變量的值

15

我知道這是一個古老的問題,但我認爲它可能對其他人有用。

我發現使用這個LOC

Field [] attributes = MyBeanClass.class.getDeclaredFields(); 

這裏是工作示例的部分解決方案:

import java.lang.reflect.Field; 

import org.apache.commons.beanutils.PropertyUtils; 

public class ObjectWithSomeProperties { 

    private String firstProperty; 

    private String secondProperty; 


    public String getFirstProperty() { 
     return firstProperty; 
    } 

    public void setFirstProperty(String firstProperty) { 
     this.firstProperty = firstProperty; 
    } 

    public String getSecondProperty() { 
     return secondProperty; 
    } 

    public void setSecondProperty(String secondProperty) { 
     this.secondProperty = secondProperty; 
    } 

    public static void main(String[] args) { 

     ObjectWithSomeProperties object = new ObjectWithSomeProperties(); 

     // Load all fields in the class (private included) 
     Field [] attributes = object.getClass().getDeclaredFields(); 

     for (Field field : attributes) { 
      // Dynamically read Attribute Name 
      System.out.println("ATTRIBUTE NAME: " + field.getName()); 

      try { 
       // Dynamically set Attribute Value 
       PropertyUtils.setSimpleProperty(object, field.getName(), "A VALUE"); 
       System.out.println("ATTRIBUTE VALUE: " + PropertyUtils.getSimpleProperty(object, field.getName())); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
}