1 回答
TA贡献1801条经验 获得超15个赞
这是命名约定的问题。
...因此,当我们从现有 Java 名称的中间提取属性或事件名称时,我们通常会将第一个字符转换为小写*case 1。然而,为了支持偶尔使用所有大写名称,我们检查名称的前两个字符*case 2是否都是大写,如果是,就不要管它。例如,
'FooBah' 变成 'fooBah'
'Z' 变成 'z'
'URL' 变成 'URL'我们提供了一个 Introspector.decapitalize 方法来实现这个转换规则
因此,对于您给定的类,根据 *case1推导出的属性是“user_Name”getUser_Name()
而不是“User_Name”。setUser_Name()
并且getProperty(bean, "ID")
根据 *case 2 进行调用。
为解决该问题,请根据Java 命名规范更新命名,属性和方法应以小写字母开头,并使用camelCase而不是snake_case来分隔单词。请记住,遵循约定在编程中非常重要。下面以更新后的类为例。
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.beanutils.BeanUtils;
public class User {
private String ID;
private String userName;
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public static void main(String[] args)
throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
User bean = new User();
bean.setUserName("name");
System.out.println(BeanUtils.getProperty(bean, "userName"));
}
}
添加回答
举报