类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是 List,List 等所有 List<具体类型实参> 的父类。
因为 getData() 方法的参数是 List<?> 类型的,所以 name,age,number 都可以作为这个方法的实参,这就是通配符的作用。
也就是说,当我们定义一个方法如getData(List<?> data)
,所有满足的泛型都可以使用该方法,如下:
List<String> name = new ArrayList<String>();
List<Integer> age = new ArrayList<Integer>();
List<Number> number = new ArrayList<Number>();
getData(name);
getData(age);
getData(number);
但如果我们创建了List<? extends Number> data
,说明参数泛型上限是Number,那就不能用String去设置了。