我正在阅读这篇文章来了解通配符在泛型中的作用super。我明白如何extends运作,但我很难理解super
我有一个扩展ClassA,使ClassB超ClassA类ClassB。
如果我正确理解这篇文章,则将<? super ClassB>允许任何属于ClassB.
我有以下代码
GenericMethod.java
public class GenericMethod<T> {
private List<T> list;
public GenericMethod() {
list = new ArrayList<>();
}
public void add(T t) {
list.add(t);
}
public T get(int index) {
return list.get(index);
}
}
Driver.java
public class Driver {
public static void main(String[] args) {
GenericMethod<? super ClassB> genericMethod = new GenericMethod<>();
ClassA classA = new ClassA();
genericMethod.add(classA); // Compile-time error here
}
}
错误
The method add(capture#1-of ? super ClassB) in the type GenericMethod<capture#1-of ? super ClassB> is not applicable for the arguments (ClassA)
我不明白我哪里错了。当我实例化该类时GenericMethod,我已经声明它将接受任何带有声明的超类型值。因此,类内部应该接受所有扩展的类。ClassB<? super ClassB>TGenericMethodClassB
那么为什么该add方法会抛出编译时错误呢?该方法不应该add已经知道它正在传递一个完全兼容的类型吗?
一只甜甜圈
慕妹3146593
慕桂英3389331
相关分类