GGのFF:
「効果的なJavaの」読みながらJ.Blochはこの文に出くわしました
静的工場の第五の利点は、メソッドを含むクラスが書き込まれたときに返されたオブジェクトの必要性のクラスが存在しないということです。
どういう意味ですか?誰かがいくつかの例でそれを説明できますか?
ernest_k:
それはあなたのstaticファクトリメソッドのAPIが実装は後になるまで書かれた、または生成されることはありませんそのインターフェイスタイプを、返すことができることを意味します。
例として:
public static MyInterface getMyInterfaceInstance() {
//load instance dynamically and return it.
}
この場合、ファクトリメソッドは必要MyInterface
それがコンパイルされていたときに存在するインターフェイスを。実際の実装は、以下を含む多くの方法で実行時に動的にロードすることができます。
- プロキシオブジェクトを作成します
- リフレクション(設定可能な実装クラス名は、実行時にロードされました)
- 見上げるサービスローダーを
特に、最後の2つのオプションは、単に実装クラスが別のモジュールに書き込むことができるという意味では(そして多くのモジュールは、インタフェースの実装を提供することができます)、およびこれらの実装クラスは、実行時に検出されます - 静的なため、それを可能にしていますファクトリメソッドは、実際の実装クラスの前に書き込まれます。