摘要:構造器的參數沒有確切地描述其返回的對象,適當名稱的靜態工廠方法更容易使用,也易于閱讀。在文檔中,沒有像構造器那樣明確標識出來,因此,對于提供了靜態工廠方法而不是構造器的類來說,要查明如何實例化一個類,有點困難。
第二章 創建和銷毀對象
第1條 考慮用靜態工廠方法代替構造器
兩者創建對象的形式,例如:
構造器是new Boolean();
靜態工廠方法是
public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); }
在Boolean類中, 常量TRUE和 FALSE又如下:
public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false);
靜態工廠方法的4個優勢:
1.有名稱,即方法名。構造器的參數沒有確切地描述其返回的對象,適當名稱的靜態工廠方法更容易使用,也易于閱讀。例如:
BigInteger(int, int, Random)返回的值可能為素數;用名為 BigInteger.probablePrime(int, Random)來表示,更清楚。
2.不必在每次調用它們的時候都創建一個新對象。例如: Boolean.valueOf(boolean)。
這個方法中的 TRUE和 FALSE是預先構建好的實例,并被緩存,可以重復利用。
如果程序經常創建相同的對象,并且代價很高,則這項技術可以提升性能。
3.可以返回原返回類型的任何子類型的對象。這樣提供了的靈活性。例如:
API可以返回對象,同時又不會使對象的類變成公有的。這樣,API會變得簡潔。
java.util.EnumSet類中的noneOf方法。代碼片段:
if (universe.length <= 64) return new RegularEnumSet<>(elementType, universe); else return new JumboEnumSet<>(elementType, universe);
其中 RegularEnumSet和 JumboEnumSet都是 EnumSet的子類。
4.在創建參數化類型實例的時候,使代碼變得簡潔。例如:
Map> map = new HashMap >();
如果 HashMap提供這樣的的方法:
pubic staticHashMap newInstance() { return new HashMap (); }
那么,上面的代碼就可以這樣:
Map> map = HashMap.newInstance();
靜態工廠方法的2個缺點:
1.類如果不含公有的或者受保護的構造器,就不能被子類化。
2.與其他的靜態方法實際上沒有任何區別。在API文檔中,沒有像構造器那樣明確標識出來,因此,
對于提供了靜態工廠方法而不是構造器的類來說,要查明如何實例化一個類,有點困難。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66522.html
摘要:如果采用抽象類,則屬性組合可能導致子類的組合爆炸。內部類的設計靜態成員類用修飾的內部類,可以不依賴于外部實例進行創建。如下所示其構造函數默認是,并且無法修改。 對所有對象都通用的方法 equals和hashCode方法的關系 重寫equals方法必須也要重寫hashCode方法。 equals用的屬性沒變,則多次調用hashCode返回值也必須保持不變。 equals比較相等的對象,...
摘要:這本書是我第一次買的,從買來至今整本書還沒有看完,只看了一半,原因是個人比較懶,而且玩的心比較大,經過這么多年的沉淀,終于可以偷點時間寫下對于這本書的觀后感了整本書給我的感覺不像是一個技術書,更多的是講解一些實用技巧,而對于我這個職場菜鳥來 effective Java 這本書是我第一次買的, 從買來至今整本書還沒有看完, 只看了一半, 原因是個人比較懶,而且玩的心比較大,經過這么多年...
摘要:第二章創建和銷毀對象何時以及如何創建對象,何時以及如何避免創建對象,如何確保他們能夠適時地銷毀,以及如何管理對象銷毀之前必須進行的各種清理動作。表示工廠方法所返回的對象類型。 第二章 創建和銷毀對象 何時以及如何創建對象,何時以及如何避免創建對象,如何確保他們能夠適時地銷毀,以及如何管理對象銷毀之前必須進行的各種清理動作。 1 考慮用靜態工廠方法代替構造器 一般在某處獲取一個類的實例最...
閱讀 1571·2021-09-24 10:38
閱讀 1498·2021-09-22 15:15
閱讀 3059·2021-09-09 09:33
閱讀 905·2019-08-30 11:08
閱讀 638·2019-08-30 10:52
閱讀 1253·2019-08-30 10:52
閱讀 2345·2019-08-28 18:01
閱讀 521·2019-08-28 17:55