class Foo(){
private String x,y;
//getters setters
}
main(){
Foo bar1 = new Foo();
Foo bar2 = new Foo();
bar1.setX("hey");
bar2.setX("hi");
bar2.setY(" there");
setNewValuesFromLeftToRight(bar1,bar2);//left:bar1
System.out.print(bar2.getX+bar2.getY)// hey there
}
setNewValuesFromLeftToRight:此方法将获取任何两个具有相同类的对象,并使用bar1的字段值(不为null)设置bar2的字段值
编写方法setNewValuesFromLeftToRight的最佳方法是什么?确保它应该是通用解决方案。
我会使用思考吗?
最佳答案
我阅读这些要求的方式是,如果左侧(源)Bean中存在相应的非null值,则应该覆盖右侧(目标)Bean中的任何属性。因此,这与PropertyUtils.copyProperties略有不同,后者会覆盖所有属性(包括空源值)。
一种可能性是使用Jakarta Commons BeanUtils,然后您可以使用
PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(leftBean);
if (descriptors != null) {
for (PropertyDescriptor descriptor : descriptors) {
try {
String propertyName = descriptor.getName();
Object val = PropertyUtils.getProperty(leftBean, name);
if (val != null) {
PropertyUtils.setProperty(rightBean, name, val);
}
} catch (Exception ignore) {
// not interested in what we can't read or write
}
}
}
关于java - 将字段值设置为同一Class的另一个实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2315651/