什么是泛型
不确定的数据类型
从概念上讲就是一个预定义数据类型(占位符)
## 泛型的好处:
* 代码更加简洁【不用强制转换,在编写集合的时候,就限定了类型】
* 程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】
泛型必须是包装类,用基本数据类型,int会发生异常,int 没有null。
泛型集合
Object(没意义,特殊情况除外) String Integer
## 二、泛型类
泛型标识:本质就是一个占位符
T:通用泛型类型
E:集合元素泛型类型list<E>
K:映射-键 泛型类型
V:映射-值 泛型类型
### 从泛型类派生子类:
子类:也叫派生类
父类: 超类 基类
如果子类和 父类泛型标识不一样,会爆红
子类的泛型标识可以有多个,父类的泛型标识只能有一个
子类的泛型标识可以有多个,创建对象的时候必须指定扩展的类型
### 三、泛型接口
如果实现类不是泛型类,接口要明确数据类型
## 四、泛型方法
泛型方法和泛型类的区别:
泛型类:是在实例化类的时候指明泛型的具体类型
泛型方法:是在调用方法的时候指明泛型的具体类型
定义语法:
1、public与返回值类型中间的<T>非常重要,可以理解为声明此方法为泛型方法。
2、只有在泛型列表中声明了泛型标识的方法才是泛型方法
3、<T>表明该方法将使用泛型类型T
4、与泛型类的定义一样,此处T可以写为任意标识
泛型方法:就是将方法参数类型中的泛型,提前在前面声明,必须用<>包起来。
修饰符 <泛型标识> 返回值类型 方法名(形参){
方法体
}
五、泛型通配符
泛型通配符一般是使用""?"代替具体的类型实参
泛型通配符上限:类/接口<? extends 实参类型>
泛型通配符下限:类/接口<? super 实参类型>
### 六、泛型擦除
泛型信息只存在于代码编译阶 段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,
List的三个子类:
ArrayList: 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。
Vector: 底层数据结构是数组,查询快,增删慢。 线程安全,效率低。
LinkedList: 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。
### 桥接方法:
在接口后面定义了泛型标识,实现接口类重写接口方法,把泛型标识T转换成了Integer。