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/

10-12 05:57