Java泛型中的标记符含义:
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)
- K - Key(键)
- V - Value(值)
- N - Number(数值类型)
- ? - Indetermination 表示不确定的java类型
- S、U、V - 2nd、3rd、4th types
举例说明:
- 用泛型
List<T> list = new ArrayList<T>();
T t = list.get(0);
- 不用泛型
List list = new ArrayList();
T t = (T)list.get(0);
Object跟这些标记符代表的Java类型的区别
Object是所有类的根类,任何类的对象都可以设置给该Object引用变量,使用的时候可能需要类型强制转换,但是用使用了泛型T、E等这些标识符后,在实际用之前类型就已经确定了,不需要再进行类型强制转换。
对于T 、?、Object采用顺序:T >?>Object。
T:读写
?:只读
Object:读写,写入需向上转型,读取后需向下转型
用泛型只是确定了集合内的元素的类型,但却是在编译时确定了元素的类型再取出来时已经不再需要强转,增强程序可读性,稳定性和效率。
不用泛型时,如果是装入集合操作,那么元素都被当做Object对待,失去自己的类型,那么从集合中取出来时, 往往需要转型,效率低,容易产生错误。
上下限
“? extends 类”表示设置泛型上限
“? super 类”表示设置泛型下限
利用“?”通配符可以接收全部的泛型类型实例,但却不可修改泛型属性内容
之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限和下限。
在引用传递中,泛型操作中也可以设置一个泛型对象的范围上限和下限。范围上限使用extends关键字声明,表示参数的类型可能是所制定的类型,或者是此类型的子类,而范围下限使用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object类。
如果定义了泛型类,在实例化时没有指明泛型,则认为此泛型类型是Object类型。