泛型的总结
- 泛型不支持使用基本数据类型,基本数据类型要使用时需要使用包装类。
- 泛型不支持使用数组
- 当使用基本数据类型包装类且获取数据时,如果该属性没有赋值保持默认值的话,那它的值为null,这时要注意自动拆箱会导致空指向异常。
- 同一个类上可以定义多个泛型标记。
- 当一个泛型类做为某个方法的参数时,就需要用到通配符
?
。此时,不能设置数据,只能取出数据。
- 当使用
?
通配符取出数据时,数据类型是Object,要给变量赋值时,必须向下转型。
T extends 类
或 ? extends 类
设置泛型的上限,可以在类声明或方法上使用。
? super 类
设置泛型下限,只能在方法上使用。
- 泛型接口分两种:一是在子类继续设置泛型标记。二是子类不设置泛型标记,而为父类接口明确地定义一个泛型类型。
- 泛型方法
public static <T> T fun(T t)
T的类型由传入的参数决定。
方法参数中使用通配符 ?
和 不声明泛型类型 和 声明泛型具体类型 区别:
- 1、public void fun(Generic<?> temp)
使用通配符 ? 获取到的数据类型是 Object,要赋值变量就必须向下转型,同时,因为 ? 不能确定类型,所以不能设置数据。
- 2、public void fun(Generic temp)
不声明泛型相当于默认是Objecte,此时,可以设置或取出数据,同样,获取到的数据类型是 Object,要赋值变量就必须向下转型。
- 3、public void fun(Generic temp)
声明泛型具体类型时,可以设置或取出数据,获取到的数据类型是其声明时的类型,要赋值变量不需要向下转型 。