泛型的上下限以及通配符
1 泛型中通配符: ?
2 需求1: 定义一个函数可以接收接收任意类型的集合对象, 要求接收的集合对象只能存储Integer或者是Integer的父类类型数据。
1 public class Demo4 { 2 public static void main(String[] args) { 3 ArrayList<Integer> list1 = new ArrayList<>(); 4 ArrayList<Number> list2 = new ArrayList<>(); 5 6 HashSet<String> set = new HashSet<>(); 7 8 print(list1); 9 print(list2); 10 11 } 12 13 //需求1: 定义一个函数可以接收接收任意类型的集合对象, 要求接收的集合对象只能存储Integer或者是Integer的父类类型数据。 14 public static void print(Collection<? super Integer> c){ 15 16 } 17 18 }
注意: ? super Integer : 只能存储Integer或者是Integer父类元素。 泛型的下限
需求2: 定义一个函数可以接收接收任意类型的集合对象, 要求接收的集合对象只能存储Number或者是Number的子类类型数据。
1 public class Demo4 { 2 public static void main(String[] args) { 3 ArrayList<Integer> list1 = new ArrayList<>(); 4 ArrayList<Number> list2 = new ArrayList<>(); 5 6 HashSet<String> set = new HashSet<>(); 7 8 print2(list1); 9 print2(list2); 10 } 11 12 //需求2: 定义一个函数可以接收接收任意类型的集合对象, 要求接收的集合对象只能存储Number或者是Number的子类类型数据。 13 public static void print2(Collection<? extends Number> c){ 14 15 } 16 }
注意: ? extends Number : 只能存储Number或者是Number类型的子类数据。 泛型上限