제이온

[Effective Java] 項目 4. 若要阻止實例化,請使用 private 建構函式

  • 撰写语言: 韓国語
  • 基准国家: 所有国家country-flag
  • 信息技术

撰写: 2024-04-28

撰写: 2024-04-28 13:38

有時只包含靜態方法和靜態欄位的類別會很有用。


例如,像 java.lang.Math、java.util.Arrays 這樣的類別,它們將數學運算或與陣列相關的方法組合在一起,可用作工具類別。或者像 java.util.Collections 一樣,將用於建立實作特定介面的物件的靜態工廠方法組合在一起。


這些工具類別不需要任何實體變數或方法,因此不需要建構函式。但是,如果沒有明確定義建構函式,編譯器會自動建立 public 的預設建構函式。因此,使用者無法區分此建構函式是自動建立的還是手動定義的。


為了防止這種情況,有時會將其設為抽象類別,但是,使用抽象類別無法阻止實體化。因為只要建立子類別並實體化即可。



因此,為了防止工具類別被實體化,必須將建構函式的存取修飾詞設為 private。



如上所示,如果預設建構函式的存取修飾詞為 private,則類別外部無法存取。此外,如果在內部呼叫預設建構函式,則會拋出例外以阻止它。


這種 private 建構函式對於使用者來說可能難以理解,因此建議加上註解。順帶一提,將建構函式設為 private 也會導致無法繼承。


資料來源

评论0