首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 建構子賦值最佳實踐:直接賦值 vs 調用 Setter

     編輯:程式設計綜合問答

結論

建構子內部推薦直接賦值(this.field = value;),除非 Setter 包含必要的驗證/副作用邏輯。

理由對比

最佳實踐範例

public class User {
    private String name;
    private int age;

    // 建構子:直接賦值,複用私有驗證方法
    public User(String name, int age) {
        setNameInternal(name);  // 私有方法,不可覆寫
        setAgeInternal(age);
    }

    // 公開 Setter:供外部調用,含驗證
    public void setName(String name) {
        setNameInternal(name);
    }

    private void setNameInternal(String name) {
        if (name == null || name.trim().isEmpty())
            throw new IllegalArgumentException("Name cannot be empty");
        this.name = name.trim();
    }
    // age 同理...
}

關鍵原則

  • 建構子、clone、反序列化等「對象初始化」路徑,使用 private 內部方法賦值。
  • 公開 Setter 委派給同一內部方法,確保驗證邏輯單一來源。
  • 絕不在建構子中調用可覆寫方法(public/protected),這是 Effective Java 條目 19 強調的核心規則。

遵循此模式,代碼既安全又無重複。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方式優點缺點/風險
直接賦值簡潔、效能高、避免多態調用風險、不觸發副作用重複驗證邏輯(可提取私有方法複用)
調用 Setter複用驗證/格式化邏輯、觸發屬性變更事件1. 子類覆寫 Setter 導致建構子調用子類邏輯(字段未初始化)
2. 可能觸發不可預期的副作用(事件、日誌)
3. 稍慢(虛方法調用)