有没有办法使用 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会处理的事情吗?