选择语言
durumis AI 总结的文章
- 在建立僅包含靜態方法和欄位的工具類時,應將建構函數設為 private,以阻止實例化。
- 這可以防止在類別外部呼叫建構函數,並可以明確地控制編譯器自動生成的 public 默認建構函數。
- 私有建構函數會使繼承變得不可能,因此可以限制對工具類的故意使用,並提高程式碼的可讀性。
有時使用只包含靜態方法和靜態字段的類很有用。
例如,可以使用 `java.lang.Math`、`java.util.Arrays` 等類來收集數學運算或與數組相關的方法。 或者,可以使用 `java.util.Collections` 等類來收集生成實現特定接口的對象的靜態工廠方法。
這些實用程序類不需要單獨的實例變量或方法,因此不需要構造函數。但是,如果沒有顯式聲明構造函數, 編譯器將自動創建一個公共默認構造函數。因此,用戶無法區分此構造函數是自動生成的還是手動編寫的。
為了避免這種情況,有時會使用抽象類,但抽象類無法阻止實例化。因為可以創建子類並實例化它們。
public abstract class Person {
public static void speak(String message) {
System.out.println(message);
}
}
public class Student extends Person {
public Student() {
super();
}
因此,為了防止實用程序類的實例化,需要將構造函數的訪問修飾符設置為 `private`。
public abstract class Person {
private Person() {
throw new AssertionError();
}
public static void speak(String message) {
System.out.println(message);
}
如上所示,如果默認構造函數的訪問修飾符為 `private`,則外部無法訪問它。此外,如果在內部調用默認構造函數, 則會拋出異常以阻止它。
這種私有構造函數可能難以理解,因此建議添加註釋。另外,將構造函數設置為 `private` 會導致無法繼承類。