【发布时间】:2011-01-07 14:14:57
【问题描述】:
假设我有一个类 Foo、一个类 A 和 A 的一些子类 B。Foo 接受 A 及其子类作为泛型类型。 A 和 B 在其构造函数中都需要一个 Foo 实例。我希望 A 的 Foo 为 A 类型,B 的 Foo 为 B 类型或 B 的超类。所以实际上,我只想要这个:
Foo<X> bar = new Foo<X>;
new B(bar);
如果 X 是 A、B 或 A 的子类和 B 的超类,则可能。
到目前为止,这是我所拥有的:
class Foo<? extends A>{
//construct
}
class A(Foo<A> bar){
//construct
}
class B(Foo<? super B> bar){
super(bar);
//construct
}
对super(...) 的调用不起作用,因为<A> 比<? super B> 更严格。在强制执行这些类型时是否可以使用构造函数(或通过其他方式避免代码重复)?
编辑:Foo 保留了泛型参数类型的元素的集合,这些元素和 Foo 具有双向链接。因此,应该不可能将 A 链接到 Foo。
【问题讨论】:
-
这看起来不是您的实际代码。
-
是的,它是代码的简化版本。你认为我错过了什么吗?
标签: java generics inheritance constructor