2020/06/23

[筆記] Effective Java #4 用 private constructor 來強化不可實例化

Effective Java 3rd 簡體中文版筆記 #4 用 private constructor 來強化不可實例化
有時候有些 class 會只有 static field 及 static method,這樣的使用方式,在 OOP 環境下,有機會被濫用。其實這類 class 是有特別用處的,大多是像工具一樣 (Utility class)。這類的 class 不需要生成實體,應用 static 方式來調用,所以要避免任何讓它有被生成實體的機會。
在 class 沒有 constructor 時,視為 default constructor,所以開發者還是有機會生成該 class 實體,正確方式為替該 class 提供 private constructor。這類慣用的作法,讓該 class 同時無法被繼承。
public class UtilityClass{
    public static final String NAME = ...;
    private UtilityClass() { }
}
那如果定義為 abstract class 呢? 沒錯,這樣開發者就不能對它生成實體,但可以寫 subclass 來繼承該 class,在生成 subclass 後,同樣會對該 class 實例化,所以定義為 abstract class 的方法是無效的。

轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2020/06/effective-java-4-private-constructor.html

沒有留言:

張貼留言