回覆列表
  • 1 # 使用者5638462075118

    優點

    1. 和構造方法不一樣,靜態工廠方法可以有自己明確的名字。比如newInstance、getInstance、valueOf,可以更明確知道這些方法名字的意思。而構造方法只能透過new類名來建立,比如Person person = new Person()。

    2. 不必沒次呼叫時都建立一個新物件。使用靜態工廠方法對外提供單例,其實就是提前準備好例項,這樣可以重複利用,減少重複建立例項,不過這也需要注意執行緒安全問題。

    3. 可以返回原返回型別的任何子類的物件。這個可以這麼理解,例如EnumSet類,EnumSet是抽象類是不能被例項化的,但是可以透過裡面的noneOf靜態工廠方法返回它子類的物件,RegularEnumSet和JumboEnumSet都是EnumSet的子類,程式碼如下:

    public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>

    implements Cloneable, java.io.Serializable {

    EnumSet(Class<E>elementType, Enum[] universe) {}

    public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {

    if (universe.length <= 64)

    return new RegularEnumSet<>(elementType, universe);

    else

    return new JumboEnumSet<>(elementType, universe);

    }

    }

    4.在建立引數化型別例項的時候,它們使程式碼變得更加簡潔。這條可以這麼理解,比如在建立一個Map型別物件時,我們一般可以這麼建立:

    Map<String, List<String>> m = new HashMap<String, List<String>>();

    但是在JDK7以上的版本,泛型引數是可以被推匯出來的,所以可以有更簡潔的寫法:

    Map<String, List<String>> m = new Hash

  • 中秋節和大豐收的關聯?
  • 動作頻頻美汁源,花大“粒”如何給年輕一代帶來大歡喜?