如何打出java通配符
使用泛型通配符
在Java中,通配符(?)用于泛型类型参数,表示未知类型。主要有以下三种使用方式:
无界通配符
直接使用?表示任意类型,例如:
List<?> list = new ArrayList<String>();
上界通配符
使用<? extends T>表示类型为T或其子类:
List<? extends Number> numbers = new ArrayList<Integer>();
下界通配符
使用<? super T>表示类型为T或其父类:
List<? super Integer> integers = new ArrayList<Number>();
通配符的应用场景
方法参数
通配符常用于方法参数,增强灵活性:
public void printList(List<?> list) {
for (Object elem : list) {
System.out.println(elem);
}
}
集合操作
在集合类中结合泛型使用,例如Collections工具类:
List<? extends Comparable<?>> comparableList = new ArrayList<String>();
注意事项
-
类型安全
使用通配符时,编译器会限制对泛型对象的修改操作(如add),仅允许读取(如get)。 -
与泛型方法的区别
泛型方法通过类型参数(如<T>)实现类型安全,而通配符更适用于声明不确定类型的变量或参数。 -
PECS原则
Producer-Extends, Consumer-Super:生产数据时用extends,消费数据时用super。例如:
void copy(List<? extends Number> src, List<? super Number> dest) { dest.addAll(src); }
通过合理使用通配符,可以在保持类型安全的同时提升代码的灵活性。






