Javaジェネリックを使用して、次のような型階層を表現する方法はありますか?
class A { ... }
class B extends A { ... }
interface Wraps<T> {
T getWrapped();
}
class WrapsA implements Wraps<A> {
A getWrapped();
}
class WrapsB extends WrapsA /* implements Wraps<B> */ {
B getWrapped();
}
書かれているように、Java の型システムがこのコードを拒否することは理解していますが、これを機能させる型パラメーターまたは継承階層を指定する方法はありますか?
編集: 私が抱えている本当の問題は、次のようなメソッドの API で型の安全性を強制しようとしていることに気付きました
<T extends A> T unwrap(Wraps<T> wrapper, Class<T> wrappedClass);
で呼び出すことができませんunwrap(wrapsB, B.class)
。これはJavaが処理するものですか?