14

我有一个获取 POJO 作为参数的方法。现在我想以编程方式获取 POJO 的所有属性(因为我的代码在运行时可能不知道其中的所有属性是什么)并且还需要获取属性的值。最后,我将形成 POJO 的字符串表示形式。

我可以使用ToStringBuilder,但我想以特定于我的要求的特定格式构建我的输出字符串。

是否可以在 Beanutils 中这样做!?如果是,任何指向方法名称的指针?如果不是,我应该编写自己的反射代码吗?

4

3 回答 3

18

我知道这是一个有年头的问题,但我认为它对其他人有用。

我找到了使用此 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();
            }

        }
    }
}
于 2012-12-19T19:46:39.963 回答
11

你试过ReflectionToStringBuilder吗?看起来应该按照您的描述进行。

于 2009-06-24T13:33:44.917 回答
3

使用反射获取所有属性/变量(只是名称)。现在使用getProperty方法获取该变量的值

于 2009-06-24T13:36:48.703 回答