javabean根據屬性名稱獲取對應的的getter/setter方法名
阿新 • • 發佈:2019-02-08
一般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並不會為我們做這些。
例如:屬性名為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(); } }