これは既存のインターフェースです。
public interface MyInterface<T, U> {
public T foo(U u);
}
T と U が同じ型であるという仮定の下で、このインターフェイスを実装したいと考えています。型パラメーターをそのままにしておくことができ、この特定の実装を同じ型の 2 つだけでインスタンス化する限り、機能する可能性があると思いました。
public class MyOuterClass<A> {
public class MyClass<T, U> implements MyInterface<T, U> {
@Override
public T foo(U u) {
return u; //error here
}
//even though in the only instantiation of MyClass, T and U are the same
private MyClass<A, A> myInstance = new MyClass<A, A>();
}
しかし、おそらく当然のことながら、型 T と U は互換性がないため、これは機能しません。
それで、 MyClass を変更して、そのタイプが常に同じであることを指定するように変更できるのではないかと考えましたがMyClass<A, A> implements MyInterface<A, A>
、T が既に定義されているというエラーが表示されます。
2 つの型が同じになるように MyClass を実装する方法はありますか?
(私は Java よりも C++ 派なので、Java のジェネリックについて基本的なことが抜けていたらごめんなさい。)