5

次のメソッドを持つインターフェイスを作成したいと思います。

public interface MyInterface {
  public Class<X> getClass();
  public void handle(X message);
}

X は両方のメソッドで同じ型でなければなりません。これを行う必要がある理由は、(getClass を使用して) 適切なクラスにキャストする必要があるブロブであるメッセージを取得しており、実装者に適切なクラスを取るハンドル メソッドを実装するように強制したいからです (代わりにあると仮定し、リフレクションを使用してそれを呼び出す方法)。

これを行う唯一の方法は、次のように型パラメーターをインターフェイスに追加することです。

public interface MyInterface<T> {
...
}

しかし、他のさまざまなクラスでその型を指定する必要があるカスケード依存関係があるため、これは理想的とは言えません。助言がありますか?ありがとう!

4

2 に答える 2

2

Xは両方の方法で同じタイプでなければなりません

インターフェイスの2つのメソッドを、定義だけで相互に依存させることはできません。常に2つの別々のメソッドになります
getClass。 おそらく実行する必要があるのは、1つのメソッドを持ち、パラメーターとしてクラスのタイプ(または任意のインジケーターのような単純なもの)を渡し、メソッド内で使用する適切なクラスを作成するためにに委任することです。 したがって、メソッドは(最終的に)適切なクラスを取得して処理します。handle
handleEnumFactoryhandle
handle

于 2012-05-01T10:48:36.717 に答える
2

次のように、メソッドのジェネリック型パラメーターを指定できます。

public <X> void handle(X message);

ただし、これではメソッド間の一貫性が保証されないため、次の場合:

public <X> Class<X> getClazz();
public <X> void handle(X message);

<X>両方の方法で同じとは言えません。

于 2012-05-01T10:55:47.900 に答える