2016-12-11 5 views
-1

最近このようなものを作成しようとしました。そのインターフェイスを実装するクラスのインスタンスを返す静的メソッドを使ってインターフェイスを作成します。クラスを実装するには専用のコンストラクタがあり、インタフェースはリフレクションによってそのクラスのインスタンスを作成します。ここのサンプルコード:静的メソッドのインタフェースで実装のインスタンスを作成していますか?

static Implementation getImplementation(){ 
    Constructor<Implementation> constructor = Implementation.class.getDeclaredConstructor(); 
    constructor.setAccessible(true); 
    return constructor.newInstance(); 
} 

私は例外処理をしません。 このコードは何らかの目的のために有効ですか、それとも恐ろしい反パターンですか?

+0

インターフェイスを実装に不必要に結び付けているようです。なぜ、 'Implementation'クラスに' createInstance'を入れないのですか? –

+0

まあ、私はこれがインターフェイスを使用し、Impl impl = new Impl()のようなインプリメンテーションのインスタンスを作成しないように他の人に強制することを覚えていました。なぜなら、クラスを実装するコンストラクタはプライベートなものだからです(まあ、リフレクションしない限り)。 – Pitris

答えて

0

これはしばしばその後Implementation newInstance()ような方法を有する

public static ImplementationFactory newInstance() { ... } 

ImplementationFactoryような静的メソッドを提供する抽象ImplementationFactory用いて行われます。

たとえば、TransformerFactory.newInstanceを参照してください。

これを実装する方法はさまざまです。 META-INF/servicesの下のリソースから実装クラスの名前を読み取るのと同じです。

関連する問題