在Boolean
類中,有這樣一個方法:java
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
複製代碼
這就是JDK用靜態工廠方法代替構造器的一個使用。那麼這樣作有什麼好處呢?框架
Map<String, List<String>> m = new HashMap<String, List<String>>();
,雖然在JDK7以後能夠簡化爲Map<String, List<String>> m = new HashMap<>();
,但假設一下,若是HashMap提供了一個這樣的靜態工廠:public static <K, V> HashMap<K, V> newInstance() {
return HashMap<K, V>();
}
複製代碼
那麼在建立時就能夠寫爲:Map<String, List<String>> m = HashMap.newInstance();
ide
靜態工廠方法並非沒有任何缺點的:spa
valueOf
、 getInstance
、 newInstance
、 getType
等。總結:code
靜態工廠方法和構造器各有優劣。一般靜態工廠更合適,切忌第一反應就是提供公有的構造器,而不是優先考慮靜態工廠。對象
《Effective Java中文版 第2版》get