java 泛型
泛型
- 所有对象底层都是Object,不能对数据进行约束;
- 向上向下转型,太过频繁,影响效率;
泛型是给编译器的,又称参数化类型;
-
可以在类声明时通过一个标识表示类中某个【属性,方法返回值,参数】的类型;
-
泛型是编译阶段确定,所以不能修饰静态成员;
-
当在声明的时候,没有传入类型的时候,默认是Object类型;
-
给泛型的数据类型,必须是引用对象;
List<Integer> arrayList = new ArrayList<Integer>(); //简化形式 List<Integer> arrayList = new ArrayList<>(); //默认Object类型 List arrayList = new ArrayList();
自定义泛型:
-
普通成员可以使用泛型【属性,方法】;
-
静态不能使用泛型,静态是和类相关,而泛型是和对象创建相关;
-
使用泛型的数组不能初始化,
- 比如进行new E[num],因为不确定E的类型,无法开辟空间;
-
泛型的类型,是在创建对象的时候确定,
-
在创建对象时,没有指定,默认为Object;
-
泛型方法语句:
修饰符
返回类型 方法名(参数列表){} -
泛型不具有继承型;
List<Object> arrayList = new ArrayList<String>(); //语句错误; -
泛型的通配符:
-
<?>:取出是Object类型;
public static void func(List<?> list) { for (Object obj : list){ System.out.println(obj.getClass()); } }
-
-
<? extends AA>: 支持AA类及其子类,规定了上限;
public static void func(List<? extends AA> list) { for (AA obj : list){ System.out.println(obj.getClass()); } } -
<? super AA>:支持AA类及其父类,规定了下限;
public static void func(List<? super AA> list) { for (Object obj : list){ System.out.println(obj.getClass()); } }

浙公网安备 33010602011771号