1. 程式人生 > >javabean根據屬性名稱獲取對應的的getter/setter方法名

javabean根據屬性名稱獲取對應的的getter/setter方法名

一般JavaBean屬性以小寫字母開頭,駝峰命名格式,相應的 getter/setter 方法是 get/set 接上首字母大寫的屬性名。
例如:屬性名為userName,其對應的getter/setter 方法是 getUserName/setUserName。但是,還有一些特殊情況: 
1、如果屬性名的第二個字母大寫,那麼該屬性名直接用作 getter/setter 方法中 get/set 的後部分,就是說大小寫不變。例如屬性名為uName,方法是getuName/setuName。
2、如果屬性名的前兩個字母是大寫(一般的專有名詞和縮略詞都會大寫),也是屬性名直接用作 getter/setter 方法中 get/set 的後部分。例如屬性名為URL,方法是getURL/setURL。
3、如果屬性名的首字母大寫,也是屬性名直接用作 getter/setter 方法中 get/set 的後部分。例如屬性名為Name,方法是getName/setName,這種是最糟糕的情況,會找不到屬性出錯,因為預設的屬性名是name。
4、屬性型別是boolean,那麼JavaBean規範中規定boolean的getter/setter 為isXXX/setXXX,包裝類Boolean的getter/setter 為getXXX/setXXX,其中XXX為變數名(IDE生成程式碼預設就是這種格式)。
當編寫程式碼出現不規範命名,將boolean 變數宣告為isXXX時,為了保證序列化與反序列化,需將isXXX/setXXX改為isIsXXX/setIsXXX,然而IDE並不會為我們做這些。

      所以javabean中儘量不要是使用is開頭命名。

public class JavaBeansUtil {
	
	/**
	 * 根據屬性名稱和java型別,獲取對應的getter方法名
	 * @param property
	 * @param javaType
	 * @return
	 */
	public static String getGetterMethodName(String property, String javaType) {
        StringBuilder sb = new StringBuilder();
        sb.append(property);
        if (Character.isLowerCase(sb.charAt(0))) {
            if (sb.length() == 1 || !Character.isUpperCase(sb.charAt(1))) {
                sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
            }
        }
        if ("boolean".equals(javaType)) {
            sb.insert(0, "is"); 
        } else {
            sb.insert(0, "get"); 
        }
        return sb.toString();
    }
	/**
	 * 根據屬性名稱獲取對應的setter方法名稱
	 * @param property
	 * @return
	 */
	public static String getSetterMethodName(String property) {
        StringBuilder sb = new StringBuilder();
        sb.append(property);
        if (Character.isLowerCase(sb.charAt(0))) {
            if (sb.length() == 1 || !Character.isUpperCase(sb.charAt(1))) {
                sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
            }
        }
        sb.insert(0, "set"); 
        return sb.toString();
    }
	
}