一.泛型
泛型规则:
集合中
异常类不能声明为泛型
T[] arr= new T[10];//compile not pass ArrayList<Number> list1 = new ArrayList<String>();//compile not pass ArrayList<Number> list3 = new ArrayList<Float>();//compile not pass ArrayList<Integer> list2 = new ArrayList<Number>();//com[ile not pass
1、类型通配符一般是使用?代替具体的类型参数。例如 List<?> 在逻辑上是List<String>,List<Integer> 等所有List<具体类型实参>的父类。
2.类型通配符上限通过形如List来定义,如此定义就是通配符泛型值接受Number及其下层子类类型
<? extends T>和<? super T>的区别
import java.util.*; public class GenericTest { public static void main(String[] args) { List<String> name = new ArrayList<String>(); List<Integer> age = new ArrayList<Integer>(); List<Number> number = new ArrayList<Number>(); name.add("icon"); age.add(18); number.add(314); //getUperNumber(name);//1 编译错误String 不是Number的子类,Number及其下层子类类型
getUperNumber(age);//2 getUperNumber(number);//3 } public static void getData(List<?> data) { System.out.println("data :" + data.get(0)); } public static void getUperNumber(List<? extends Number> data) { System.out.println("data :" + data.get(0)); } }