泛型
1.泛型定义
JDK1.5引入的新语法,通俗来讲,泛型:就是适用于许多类型,对类型实现了参数化。
注意:1.泛型是编译时期的一种机制。
2.具体实例
定义一个存储多种类型的数组(Object),根据下标值,获取数组元素。
如图:
1.存储时存储了多种数据类型
2.获取时,并不能直接获取,需要强制类型转换。复杂,实际代码时并不能知道每个元素类型。
解决办法:指定放什么类型,不用强转。
定义:泛型类
class MyArray < T > {
}
此时是一个参数,可以定义多种:
MyArray<T,O,E,P>
E 代表Element
K 代表Key
V 代表Value
N 代表Number
T 代表Type
本质占位符
实例化,并指定当前泛型类参数类型为
Integer:MyArray< Integer > myArray = new MyArray< Integer >
2.1语法
1.泛型类
泛型类 <类型实参> 变量名;
// 定义一个泛型类引用
new 泛型类 <类型实参> (构造方法实参);
// 实例化一个泛型类对象
注意:
< E extends Number >
泛型的上界:
代表E是Number的子类,或者E是Number本身。如果是接口则此参数一定实现了这个接口。
2.泛型方法
方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { … }
实例:
public class Util {
//静态的泛型方法 需要在static后用<>声明泛型类型参数
public static void swap(E[] array, int i, int j) {
E t = array[i];
array[i] = array[j];
array[j] = t;
}
}
注意:
1.指定的参数类型只能为引用数据类型。
2.此时存储时只能存储指定数据类型。
3.泛型当中不能去直接实例化一个泛型类型的数组。
数组的定义
Object[] obj = new Object[3]
3.泛型的作用
1.存储数据时,可以帮我们进行自动的类型转换。
2.获取元素时,可以帮我们进行类型转换。
4.泛型的编译
擦除机制:
在编译时将T类型擦除为Object类型,运行时不存在泛型的概念。