递归泛型/继承中的oop Java绑定不匹配
我的结构如下:
public abstract class A <E extends El, U extends A<E,U> > { ... }
public class B<E extends El> extends A<E, B<E> > { ... }
public abstract class C <E extends El, T extends A<E, T>> { ... }
我的问题是,为什么我可以这样做:
public class R extends C<El, B<El>> { ... }
但不是
public class R <T extends B<El>> extends C<El, T> { ... }
为什么T
(扩展了B<El>
)不是B<El>
的好替代品
我得到的例外是
Bound mismatch: The type T is not a valid substitute for the bounded parameter <T extends A<El,T>> of the type C<E,T>
# 1 楼答案
因为
El extends El
和B<El> extends A<El, B<El>>
因为}和{},而不是{}。该声明通常是不安全的
T
不扩展A<El, T>
。我们知道{在不知道如何处理类中的这些类型以及为什么认为声明是安全的情况下,不可能给出任何建议。例如,如果已知
A
仅充当U
的“消费者”,那么您可以使用super
绑定,它将工作:# 2 楼答案
尝试声明
A
和C
,如下所示# 3 楼答案