在第一種情況下,您需要實例化一個特定的類型。在第二步中,您將它留給實施者來決定返回哪種類型。
我不熟悉位圖,但另一個例子是EnumSet。當您撥打:
EnumSet<SomeEnum> set = EnumSet.noneOf(SomeEnum.class);
靜態工廠方法使用取決於項目的在你的枚舉數不同的實現,以儘可能高效的所有情況。
底層代碼返回小枚舉的RegularEnumSet
或大枚舉的JumboEnumSet
。構造函數無法實現這種上下文優化。
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
Enum[] universe = getUniverse(elementType);
if (universe == null)
throw new ClassCastException(elementType + " not an enum");
if (universe.length <= 64)
return new RegularEnumSet<>(elementType, universe);
else
return new JumboEnumSet<>(elementType, universe);
}
這是非常[第一項](HTTP://有效Java書中的my.safaribooksonline.com/book/programming/java/9780137150021/creating-and-destroying-objects/ch02lev1sec1)。你可以通過它。 –
它只是一個設計偏好靜態工廠,就像使用駱駝案例的方法名稱一樣。 –
@RohitJain我意識到這是Java程序員現在的一個愚蠢的問題。這只是我從來沒有在其他語言中見過這種模式。由於我對Java的知識有限,這看起來像是另一種臃腫的語言細節。 – Overv