我注意到BeanUtils.copyProperties(dest,src)有一个奇怪的副作用。所有空的Integers(也可能是LongDate等)在两个对象(源(sic!)和目标)中均转换为0。版本:commons-beanutils-1.7.0

javadoc:



例如:

class User {
   Integer age = null;
   // getters & setters
}
...
User userDest = new User();
User userSrc = new User();
BeanUtils.copyProperties(userDest, userSrc);
System.out.println(userDest.getAge()); // 0
System.out.println(userSrc.getAge()); // 0

实际修改源对象可能会非常麻烦。用空值制作对象的“真实”副本的最佳解决方案是什么?

最佳答案

检查http://commons.apache.org/beanutils/api/org/apache/commons/beanutils/ConvertUtilsBean.html表示整数转换的默认值为0。这是因为此处的目标类型是原始int或引用int,并且原始int不能设置为null。

您可以覆盖Integer转换器,并用默认值为null的转换器替换它。

更新:用法是

import org.apache.commons.beanutils.converters.IntegerConverter;

IntegerConverter converter = new IntegerConverter(null);
BeanUtilsBean beanUtilsBean = new BeanUtilsBean();
beanUtilsBean.getConvertUtils().register(converter, Integer.class);

看一下IntegerConverter的源代码-您在构造函数中设置默认值。

关于java - BeanUtils.copyProperties将Integer null转换为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8295895/

10-13 04:32