一. 概述
引入泛型前:基本类类型 复杂类型
引入泛型后:复杂类型可以在细分为更多的类型
如原先的类型List,现在在细分成
List<Object>,
List<String>,
List<Integer>
等更多的类型
方法需要实现多个参数类型,需要重载多个方法
public void write(Integer i, Integer[] ia);
public void write(Double d, Double[] da);
现在用泛型可以直接解决
public <T> void write(T t, T[] ta);
二 泛型的定义和使用
1) 命名
K --- 键
V --- 值
E --- 异常类
T --- 泛型
? --- 通配
2)定义带类型参数的类
紧跟类名之后的<>,指定一个或者多个类型参数的名字
父类定义的类型参数不能被子类继承
<span style="font-size:12px;">public class TestClassDefine<T, S extends T> {
....
}</span>
定义带类型参数的方法
<T> void test(List<T> s){}
如果只是想实现多态,则优先使用通配符:
void GenericMethodDefine(List<?> s){}
3)对带类型参数的类进行类型参数的赋值
声明类变量或者实列化
List<String> list = new ArrayList<String>();
继承类或者实现接口时 class MyList<E> extends ArrayList<E> implements<E>{}</span>
三 实现原理
1)java泛型时编译时技术,在运行时不包含泛型信息,仅仅在Class 的实列中包含了类型参数的的定义信息。
2)一个泛型类被其所有的调用共享
<span style="font-size:18px;"> List<String> l1 = new ArrayList<String> ();
List<String> l2 = new ArrayList<String> ();
System.out.prinnln( l1.getClass() == l2.getClass());</span>
结果为true
四 Class 泛型的处理
String.class 类型代表Class<String> ;