假设有类/接口(interface)层次结构:
class A<T>{
T method(T t){
return t;
}
}
class B<T> extends A{
T method(T t){ // method(T)' in 'B' clashes with 'method(T)' in 'A'; both methods have same erasure, yet neither overrides the other
return t;
}
}
如我们所见,存在编译器错误。 我从来没有遇到过继承时如何处理泛型的规则。有什么限制? (请不要与泛型本身的继承混淆,我问的是原始类中的继承
也不要与“什么是原始类型”混淆,我知道原始类型,在这个问题上我想弄清楚继承规则是什么)
也不要以为我想修复这个错误而感到困惑。当然 B 类扩展 A 修复它。我的问题是:“我在哪里可以阅读这些限制?”
最佳答案
您必须在类定义中使用 T
,以便 T
通配符在 A
中绑定(bind)到相同的泛型类型和B
,解决冲突:
class B<T> extends A<T>
关于java - 继承层次结构对泛型的限制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129774/