试图理解超级通配符在Java泛型中的作用
我阅读这篇文章是为了理解试图理解超级通配符在Java泛型中的作用,java,generics,extends,super,Java,Generics,Extends,Super,我阅读这篇文章是为了理解super通配符在泛型中的作用。我了解扩展的工作原理,但我很难理解超级 我有一个ClassA,由ClassB扩展而成,使ClassA成为ClassB的超级类 如果我正确理解了这篇文章,和?super子句是一个下限通配符。但是绑定是在推断的类型参数上,而不是对可以传递给接受该泛型类型参数的方法的参数类型的限制 当您通过声明genericmethod说时,请详细说明编译器必须拒绝将ClassA作为要添加的参数是什么意思,因为类型参数可以推断为ClassB?如果类中的方法只接受
super
通配符在泛型中的作用。我了解扩展
的工作原理,但我很难理解超级
我有一个ClassA
,由ClassB
扩展而成,使ClassA
成为ClassB
的超级类
如果我正确理解了这篇文章,
和?super
子句是一个下限通配符。但是绑定是在推断的类型参数上,而不是对可以传递给接受该泛型类型参数的方法的参数类型的限制
当您通过声明genericmethod说时,请详细说明编译器必须拒绝将ClassA作为要添加的参数是什么意思,因为类型参数可以推断为ClassB?如果类中的方法只接受那些下限类或其子类型的。请参阅。将类型化参数作为泛型类型参数的方法,泛型类型参数又由定义?super
保证能够接受键入为下限或下限的参数。这里,add
方法只保证能够接受类型为ClassB
或更低的参数,而不管实际的类型参数是什么。
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);
}
}
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
}
}
add(Object t)
add(ClassA t)
add(ClassB t)
GenericMethod<? super ClassB> genericMethod = new GenericMethod<ClassB>();