1 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
這是命名約定的問題。
...因此,當(dāng)我們從現(xiàn)有 Java 名稱的中間提取屬性或事件名稱時(shí),我們通常會(huì)將第一個(gè)字符轉(zhuǎn)換為小寫*case 1。然而,為了支持偶爾使用所有大寫名稱,我們檢查名稱的前兩個(gè)字符*case 2是否都是大寫,如果是,就不要管它。例如,
'FooBah' 變成 'fooBah'
'Z' 變成 'z'
'URL' 變成 'URL'我們提供了一個(gè) Introspector.decapitalize 方法來實(shí)現(xiàn)這個(gè)轉(zhuǎn)換規(guī)則
因此,對于您給定的類,根據(jù) *case1推導(dǎo)出的屬性是“user_Name”getUser_Name()
而不是“User_Name”。setUser_Name()
并且getProperty(bean, "ID")
根據(jù) *case 2 進(jìn)行調(diào)用。
為解決該問題,請根據(jù)Java 命名規(guī)范更新命名,屬性和方法應(yīng)以小寫字母開頭,并使用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"));
? ? }
}
添加回答
舉報(bào)