なぜこれをやろうとしているのか、2 つのシナリオが考えられます。
この最初のもの - GenericObserver と GenericObserver の両方が、クラス インターフェイスの実装に不可欠です。この場合、オブジェクトは可能な限り特殊化する必要があるため、おそらく設計上の欠陥があります (つまり、1 つのクラスで両方を混合するよりも、それぞれ特殊なタスクに集中する 2 つの異なるクラスを使用する方が適切です)。したがって、GenericObserver を実装するクラスと GenericObserver を実装するクラスの 2 つの別個のクラスを作成する必要があります。GenericObserver を異なる型引数で 2 回実装しようとすると、Java のジェネリックは消去を使用して実装され、GenericObserver と GenericObserver は実行時に本質的に同じ GenericObserver になるため、コンパイラは文句を言います。
2 番目のシナリオ - これらのインターフェースは、実装の詳細の一部です。次に、内部クラス (または静的なネストされたクラス) を使用して目標を達成できます。例えば:
public class OuterClass {
private String hello = "Hello";
private String world = "World";
private class InnerClass1 implements GenericObserver<DataService, Tools> {
public String interfaceMethod() {
return hello + " " + world;
}
// more implementation
}
private class InnerClass2 implements GenericObserver<MobileService, Tools> {
// implementation
}
}
内部クラスを使用すると、この少し不自然な例からわかるように、包含クラスのフィールドに簡単にアクセスできます。