为什么需要泛型?
在使用集合的时候,集合可以存储任意类型的数据,
遍历特定类型的数据,需要做向下转型,比较麻烦
泛型
1、泛型概念
泛型是JDK1.5引入的新特征,是一个专门独立的技术,为了规范集合中存储的类型
比如泛型类、泛型接口等存储数据类型做统一
像数组一样,方便操作数据,比较安全
2、泛型的格式
<T,F,G>
Collection<String> c1 = new ArrayList<>();
3、泛型的特点
A-Z字母代表的是一种类型
可以定义多个泛型类型
4、泛型的分类
1、泛型类:定义在类上的泛型 class GenericClass<E,T>{},
泛型类应用: GeneriClass<String,Integer> gc = new GeneriClass<>();
2、泛型接口:interface GenericInterface<E,T>{}
泛型接口实现类:class GenericInterfaceImpl implements interface GenericInterface<String,Integer>{}
3、泛型方法:public <H,T> void get(H h , T t){ System.out.println(h+"+"+t);}
调用泛型方法:gi.get("hello",19)
5、泛型的好处
简化代码;
消除安全隐患问题,消除警告;
避免做强制类型转换;
提高效率,把运行期异常提升到了编译期;
6、泛型限定符
? :表示的类型可以是任意的类型Collection <?> c = new ArrayList<String>();
? extends E :表示可以是E类型或者E类型的子类Collection <? extends Father> c = new ArrayList<son>();
? super E :表示可以是E 类型或者E类型的父类Collection <? super son> c = new ArrayList<Father>();