在某些情况下,你可能需要定义一个可以操作多种类型元素的泛型类或方法。这时可以使用通配符?
来表示一个未知的类型参数。
无限制通配符
public void processAny(List<?> list) {
for (Object obj : list) {
// 只能读取数据,不能修改
System.out.println(obj);
}
}
上界限定通配符
public void processNumbers(List<? extends Number> list) {
for (Number num : list) {
// 只能读取数据,不能修改,且只能取Number及其子类的实例
System.out.println(num.intValue());
}
}
下界限定通配符
public void processSuper(List<? super Employee> list) {
list.add(new Employee()); // 只能添加Employee及其父类的对象
}