在 Java 開發中,JavaBean 規範看似簡單,實則暗藏許多易被忽視的細節。正確的屬性命名與存取方法設計,不僅關乎代碼可讀性,更直接影響框架(如 Spring、MyBatis、Jackson 等)的自動映射與序列化行為。本文通過具體代碼示例,深入剖析各種命名方式的優劣與潛在風險。
標準 JavaBean 規範要求:
private,提供公共的 getter/setter 方法。getXxx()(布爾型可用 isXxx()),Setter 為 setXxx()。Xxx 部分由屬性名的首字母大寫構成。若屬性名第二個字母也是大寫(如 URL),則首字母不大寫(即 getURL())。public class Person {
// 1. 標準駝峰命名 —— 強烈推薦 (★★★★★)
private String userName;
public String getUserName() { return userName; }
// 2. 下劃線命名 —— 配合資料庫字段優秀 (★★★★☆)
private String user_name;
public String getUser_name() { return user_name; }
// 3. 縮寫命名(單詞超兩字母) —— 可用但不規範 (★★★☆☆)
private String usName;
public String getUsName() { return usName; }
// 4. 單字母大寫開頭 —— 極高風險 (★☆☆☆☆)
private String uName;
public String getuName() { return uName; }
// 陷阱:IDE 自動生成常誤生成為 getUName(),導致屬性名推斷為 "UName" 而非 "uName"
// 5. 首字母大寫 —— 違反規範,屬性推斷錯誤 (★☆☆☆☆)
private String Name;
public String getName() { return Name; }
// 陷阱:規範推斷屬性名為 "name",實際卻是 "Name",框架映射失敗
// 6. 多大寫字母開頭 —— 雖符合規範但極易混淆 (★★☆☆☆)
private String UName;
public String getUName() { return UName; }
// 推斷屬性名為 "UName",但閱讀性極差
}
userName),確保所有框架、工具零誤差識別。@Column 或 MyBatis <resultMap> 映射下劃線字段,而非在 Java 端妥協命名。uName)、首字母大寫(Name)、連續大寫(UName)等反模式。JavaBean 命名規範的本質是「約定優於配置」。看似微小的命名差異,實則決定了框架能否正確推斷屬性名。堅持標準駝峰,配合註解映射外部字段,是穩健、可維護的最優選擇。