源碼 | 靜態工廠返回聲明的返回類型的子類型的實例

與構造方法相比,靜態工廠方法擁有三大優勢:

  1. 有名稱
  2. 不必在每次調用它們的時候都創建一個新的對象
  3. 可以返回聲明的返回類型的子類型的實例

優勢1、2顯然。這里在Java8源碼里找一個證明優勢3的例子,備忘。

JDK版本:oracle java 1.8.0_102

可以返回聲明的返回類型的子類型的實例

見Java8的Collections類:

    public static <T> Set<T> unmodifiableSet(Set<? extends T> s) {
        return new UnmodifiableSet<>(s);
    }

觀察UnmodifiableSet類:

    /**
     * @serial include
     */
    static class UnmodifiableSet<E> extends UnmodifiableCollection<E>
                                 implements Set<E>, Serializable {
        private static final long serialVersionUID = -9215047833775013803L;

        UnmodifiableSet(Set<? extends E> s)     {super(s);}
        public boolean equals(Object o) {return o == this || c.equals(o);}
        public int hashCode()           {return c.hashCode();}
    }

可知,UnmodifiableSet的包級私有的。

Collections.unmodifiableSet()就是一個靜態工廠方法,它可以返回原返回類型的任何子類型的對象,這帶來了兩大好處:

  • 接口開發者對外承諾的返回類型是Set,而實現中卻可以使用Set接口的任意一個實現類,比如這里返回的實現類就是不可變類UnmodifiableSet
  • 接口開發者只需要將Set設為公有的,UnmodifiableSet的可以是任意訪問權限,比如這里是包級私有的

類似的例子還有UnmodifiableMap、CopiesList等,非常之多。


本文鏈接:源碼|靜態工廠返回聲明的返回類型的子類型的實例
作者:猴子007
出處:https://monkeysayhi.github.io
本文基于 知識共享署名-相同方式共享 4.0 國際許可協議發布,歡迎轉載,演繹或用于商業目的,但是必須保留本文的署名及鏈接。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 一、基本數據類型 注釋 單行注釋:// 區域注釋:/* */ 文檔注釋:/** */ 數值 對于byte類型而言...
    龍貓小爺閱讀 4,291評論 0 16
  • 地址:https://github.com/ShuailongWang/slider使用:把文件拖進去后,導入頭文...
    飛天蛤蟆閱讀 231評論 0 0
  • 雨,淅淅瀝瀝地下,一天,兩天,三天……一雨知秋涼。 立秋后,雖然早晚微涼,但下午依然悶熱。有天還看見一位男同事上罷...
    簡遠山人閱讀 1,373評論 2 11