遇到等,是用到了java中的泛型。

Java泛型中的标记符含义:

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • - Indetermination 表示不确定的java类型
  • S、U、V - 2nd、3rd、4th types

举例说明:

  • Set 表示 集合里 是 T类的实例
  • List 表示 集合里 是 E类的实例
  • List<?> 表示 集合里的对象类型不确定,未指定
  • List 同 List<?> 是一样的。

    泛型的作用:

  1. 用泛型
  1. List<T> list = new ArrayList<T>();
  2. T t = list.get(0);
  1. 不用泛型
  1. List list = new ArrayList();
  2. 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类型。