2

次のインターフェイスが定義されています。

public interface AllImplementMe<X, Y> {
    public Y doSomething(X param);
}

ここで、実行時に上記のサブクラスを構築する必要があるファクトリ メソッドを定義したいと考えています。

public static <X,Y> AllImplementMe<X, Y> createInstance(String xClassName, String yClassName) { ... }

上記のメソッドを実際にコーディングするにはどうすればよいですか? リフレクション API を見てきましたが、理解できませんか? すべてのサブクラスにはデフォルトのコンストラクターがあると想定されています。

編集1

上記のコードの意図に関して、いくつかの説明を追加したいだけです。上記は、新しい実装サブクラスを実行時に追加し、外部で定義された構成に基づいて実行できるようにする汎用システムの一部にすぎません。したがって、実際には、この構成に基づいてファクトリ メソッドが呼び出され、適切な子オブジェクトが構築され、メソッドの実行が求められます。これは、子クラス オブジェクトを一般的な方法で実装するために構築する必要があるという問題を伴うAdnroid の AsyncTask http://developer.android.com/reference/android/os/AsyncTask.htmlと概念的に似ています。ほとんどの場合、これらの子を呼び出すコア コードは、それらのパラメーターの型には関係ありません。

4

2 に答える 2

2

代わりに、次のファクトリ メソッドを使用します。

public static <X, Y> AllImplementMe<X, Y> createInstance(Class<X> xClass, Class<Y> yClass)

次にxClass.newInstance()、のインスタンスを作成するようなものを使用できますXX(あなたが何をしたいのか正確にはわからないので、正確なコードを書いていませんY。)

于 2013-02-27T13:13:35.100 に答える
1

すべてがはるかに簡単です。これらのパラメータは必要ありませんString xClassName, String yClassName

インターフェイスの実装があるとします。

public class SomeImplementation<A,B> implements AllImplementMe<A,B> {
   @Override
   public B doSomething(A param) {
       //      ... blablabla ...
   }
}

次に、静的ファクトリメソッドは次のようになります。

public static <A, B> AllImplementMe<A, B> createInstance() {
    return new SomeImplementation<A,B>();
}
于 2013-02-27T13:19:57.773 に答える