泛型通配符(Generic Wildcards)是 Java 泛型中用来表示“未知类型”的特殊符号,主要用在泛型类的引用、方法参数中,用来提高代码的灵活性。
最常见的通配符有三种:
?表示任意类型。
List<?> list;
含义:
List(如 List<String>、List<Integer>)null)List<?> list = new ArrayList<String>();
// list.add("abc"); // 编译错误
常用于:只读取、不写入的场合。
? extends T表示T 或 T 的子类(上限是 T)。
List<? extends Number> list;
含义:
List<Integer>、List<Double> 等null)List<? extends Number> list = new ArrayList<Integer>();
Number n = list.get(0); // OK
// list.add(1); // 编译错误
常用于:生产者(Producer),即“往外读数据”。
? super T表示T 或 T 的父类(下限是 T)。
List<? super Integer> list;
含义:
List<Integer>、List<Number>、List<Object>ObjectList<? super Integer> list = new ArrayList<Number>();
list.add(1); // OK
Object o = list.get(0); // OK
常用于:消费者(Consumer),即“往里写数据”。
Producer Extends, Consumer Super
? extends T? super T示例:
public void copy(List<? extends Number> src,
List<? super Number> dest) {
for (Number n : src) {
dest.add(n);
}
}
<T> void method(List<T> list) // 明确一个类型 T
void method(List<?> list) // 不关心具体类型
T 可以在方法内部继续使用? 只是“占位未知类型”,不能当作具体类型使用如果你愿意,我也可以用通俗比喻(如盒子/容器)或面试题角度再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。