26什么是 Java 泛型的上下界限定符?
约 251 个字 11 行代码 预计阅读时间 1 分钟
上界限定符是 extends ,下界限定符是 super
<? extends T>
表示类型的上界,?这个类型要么是 T ,要么是 T 的子类
下面就是一个典型的例子:
// 定义一个泛型方法,接受任何继承自Number的类型
public <T extends Number> void processNumber(T number) {
// 在这个方法中,可以安全地调用Number的方法
double value = number.doubleValue();
// 其他操作...
}
<? super T>
表示类型的下界(也叫做超类型限定),?这个类型是 T 的超类型(父类型),直至 Object
下面也是一个典型的例子:
// 定义一个泛型方法,接受任何类型的List,并向其中添加元素
public <T> void addElements(List<? super T> list, T element) {
list.add(element);
// 其他操作...
}
我们在使用上下界通配符的时候,需要遵循 pecs 原则,即Producer Extends, Consumer Super;上界生产,下界消费。
什么意思呢?
如果要从集合中读取类型 T 的数据,并且不能写入,可以使用 ? extends 通配符;(Producer Extends),如上面的 processNumber
方法,我们是要从方法中得到 T 类型,也就是方法给我们生产。
如果要从集合中写入类型 T 的数据,并且不需要读取,可以使用 ? super 通配符;(Consumer Super),如上面的 addElements
方法,我们是要往方法中传入 T 类型,也就是方法帮我们消费。