デビッドMarciel:
Javaの8の新しい日付のパッケージでは、「使用してから変更し、新規に日付()」「LOCALDATEを。の()」。
Date d = new Date(year, month, dayOfMonth); //Old way
LocalDate d2 = LocalDate.of(year, month, dayOfMonth); //new way
新しいオブジェクトをしたいときには、通常使用new
のキーワードを。これは、新しいオブジェクトを作成するための直感的な方法です。
時には、あなたが遅延初期化とシングルトンを必要なときには、インスタンスを取得する静的メソッドを使用することができます。この場合、あなたはそれを呼び出す必要がありgetInstance()
、開発者が期待するものを知っているので。
この新しい構文ではコードがあまり直感的になります。これは、特定のオブジェクトの代わりに、単にそれらを使用して対処する方法を学ぶためにあなたを強制します。
この変更のためにボンネットの下に何か良い理由がありますか?
ラビンドラRanwala:
通常はstaticファクトリメソッドは、いくつかの理由のためのコンストラクタに好まれます、
- 彼らは名前を持っている、それはあなたのコードがはるかに読みやすくなります。
- staticファクトリメソッドは、共変戻り値の型を持つことができますが、コンストラクタができません。これはあなたのAPIのユーザーは、あなたがより多くの部屋の将来のリリースでは、コンクリートの型を変更することができ、インターフェイスではなく、実装して作業することができます。また、それはあまりにもAPIの概念的な表面積を低減します。
- コンストラクタとは異なり、staticファクトリメソッドは、特定の最適化を行うことができます。逆に、あなたは、コンストラクタを呼び出すたびに、あなたはそれが新しいオブジェクトを返すことを期待しています。例えば、静的ファクトリメソッドの実装をチェックしてください
Collections.emptyList();
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
それは熱心にシングルトンリストを作成し、コンストラクタを使用した場合に発生する不要なオーバーヘッドを保存するすべての呼び出しでそれを返します。
上記の理由に、静的な工場は、今日のプログラミングでコンストラクタに好まれます。しかし、あなたはまだ使用できるnew
状況が正当としてコンストラクタでキーワードを。