1 泛型
泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
泛型的好处就是编译的时候检查类型安全,并且类型的转换都是自动和隐式的,代码的复用率高
保证了类型的安全性 增强了代码的健壮性
消除强制转换 增加代码可读性 减少错误
避免了不必要的装箱和拆箱操作
泛型使用 (三种方式)
泛型类 泛型接口 泛型方法
泛型类
public class 类名 <泛型类型1,...> {
}
泛型类型必须是引用类型(非基本数据类型)
定义泛型类,在类名后添加一对尖括号,并在尖括号中填写类型参数,参数可以有多个,多个参数使用逗号分隔:
public class GenericClass<ab,a,c> {}
泛型方法概述:把泛型定义在方法上
方法声明中定义的形参只能在该方法里使用,而接口、类声明中定义的类型形参则可以在整个接口、类中使用。当调用fun()方法时,根据传入的实际对象,编译器就会判断出类型形参T所代表的实际类型。
T:任意类型 type
E:集合中元素的类型 element
K:key-value形式 key
V:key-value形式 value
类型通配符
类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是 List<String>,List<Integer> 等所有 List<具体类型实参> 的父类
泛型擦除
所谓的泛型擦除其实很简单,简单来说就是泛型只在编译时起作用,运行时泛型还是被当成 Object 来处理