在使用BeanUtils為對象的屬性賦值時發現像aInteger這種命名的屬性有問題,看了一下代碼發現BeanUtils是基於get、set函數來進行取值、賦值的,對象的屬性名稱是通過截取get、set函數名得到的,具體如下:
if (returnType.equals(boolean.class) && isPrefix(name, "is")) {
PropertyInfo info = getInfo(map, name.substring(2), false);
info.read = new MethodInfo(method, boolean.class);
} else if (!returnType.equals(void.class) && isPrefix(name, "get")) {
PropertyInfo info = getInfo(map, name.substring(3), false);
info.readList = add(info.readList, method, method.getGenericReturnType());
}
當使用aInteger這種命名時對應的get、set函數名為:
public Integer getAInteger(){return aInteger;}
public void setAInteger(Integer value){aInteger = value;}
那麼BeanUtils記錄的屬性名就是AInteger,所以使用aInteger進行賦值當然就不生效了,需要用AInteger進行賦值才能正常工作,如:
BeanUtils.setProperty(bean, "AInteger", 123); // 可以正常賦值
閱讀更多 chenjiafan 的文章