一、引言
泛型定义的是一种类的约束关系,它表示的类要么自己写出,要么编译器可以推算得出。
二、泛型的使用
- 集合中使用泛型
//定义Map的键值对数据类型
Map<Person,Integer> map = new TreeMap<>();
//定义Entry的数据类型
Set<Map.Entry<Person, Integer>> set2=map.entrySet();
自定义泛型类,泛型接口:
1.定义类,接口时可使用泛型< >,如
class A<T>{ } class B extends A<String>{ }
2.如实例化是没指定泛型类型,则默认Object
3.继承泛型类和泛型接口时,可指定泛型类型,也可不指定泛型方法:
调用方法时,通过输入参数决定方法返回值类型public <E> E get(E e){} public <T> List<T> fromArrayToList(T[ ] t,List<T> list)
- 泛型与继承的关系
集合间为并列关系,其共同父类为使用通配符“?”的集合类 - 通配符
List<?>
<? extends A>: A及其子类
<? super A> : A及其父类
注意几点:
1.不可在静态方法中使用泛型,因为泛型随着对象的创建确定
2.不可在catch(E e)中使用泛型
3.可以读取声明为通配符的集合类的对象(以Object方式读),但不能写入(唯一例外:null)