源碼 | 靜態(tài)工廠返回聲明的返回類型的子類型的實例

與構造方法相比,靜態(tài)工廠方法擁有三大優(yōu)勢:

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

優(yōu)勢1、2顯然。這里在Java8源碼里找一個證明優(yōu)勢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()就是一個靜態(tài)工廠方法,它可以返回原返回類型的任何子類型的對象,這帶來了兩大好處:

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

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


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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容