1.泛型是什么?
1)参数化的一种类型,例如List<E>,Map<K,V>,PageObject<T>
2)编译时的一种类型,运行阶段无效。
2.为何使用泛型?
1)提高代码的灵活性,可重用性。(例如PageObject,PageUtil)
2)提高程序的运行时性能。(可以将类型检测操作放在编译阶段)
3.泛型的应用类型?
1)泛型类: class 类名<泛型>{}
2)泛型接口: interface<泛型>{}
3)泛型方法: 修饰符 <泛型>返回值类型 方法名(参数列表){}
-说明:泛型必须是对象类型,例如Container<int>是错误的。
4.泛型的通配符? (通配符可以理解为一种不确定的类型)
1)“?”可以作为泛型应用中的一种通配符。
2)“?”代表泛型应用中任意一种实际参数类型(相当于实参)。
-说明:"?"通过应用在变量定义,方法返回值定义。
5.泛型的上下界问题?
1)指定泛型上界:<? extends 上届> 例如List<? extends Object>
2)指定泛型下届:<? super 下届> 例如List<? super String>
思考如下写法是否正确:
1)List<Object> list1=new ArrayList<String>(); 不正确
2)List<String> list2=new ArrayList<Object>(); 不正确
如何指定具体的上下界
1)List<? extends Object> list1=new ArrayList<String>();
1)List<? super String> list1=new ArrayList<Object>();
说明:泛型上下界一般只应用在方法形参定义,返回值类型定义,以更好
实现这个方法的通用性。
6. 泛型的类型擦除
泛型在运行时无效,在运行时所有泛型类型都会转换为Object类型。
class Test<String,Integer>{}