我有一个获取 POJO 作为参数的方法。现在我想以编程方式获取 POJO 的所有属性(因为我的代码在运行时可能不知道其中的所有属性是什么)并且还需要获取属性的值。最后,我将形成 POJO 的字符串表示形式。
我可以使用ToStringBuilder,但我想以特定于我的要求的特定格式构建我的输出字符串。
是否可以在 Beanutils 中这样做!?如果是,任何指向方法名称的指针?如果不是,我应该编写自己的反射代码吗?
我有一个获取 POJO 作为参数的方法。现在我想以编程方式获取 POJO 的所有属性(因为我的代码在运行时可能不知道其中的所有属性是什么)并且还需要获取属性的值。最后,我将形成 POJO 的字符串表示形式。
我可以使用ToStringBuilder,但我想以特定于我的要求的特定格式构建我的输出字符串。
是否可以在 Beanutils 中这样做!?如果是,任何指向方法名称的指针?如果不是,我应该编写自己的反射代码吗?
我知道这是一个有年头的问题,但我认为它对其他人有用。
我找到了使用此 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();
}
}
}
}
你试过ReflectionToStringBuilder吗?看起来应该按照您的描述进行。
使用反射获取所有属性/变量(只是名称)。现在使用getProperty方法获取该变量的值