你们好,我是Java最全面试题库
的提裤姐
,今天这篇是面试系列的第六篇,主要总结了JavaSE中泛型相关面试题,在后续,会沿着第一篇开篇的知识线路一直总结下去,作到日更!若是我能作到百日百更
,但愿你也能够跟着百日百刷
,一百天养成一个好习惯。java
Java泛型( generics)是JDK 5中引⼊的⼀个新特性, 容许在定义类和接口的时候使⽤类型参数( type parameter) 。
声明的类型参数在使⽤时⽤具体的类型来替换。泛型最主要的应⽤是在JDK 5中的新集合类框架中。面试
泛型最⼤的好处是能够提⾼代码的复⽤性。以List接口为例,咱们能够将String、 Integer等类型放⼊List中, 如不⽤泛型, 存放String类型要写⼀个List接口, 存放Integer要写另外⼀个List接口, 泛型能够很好的解决这个问题。框架
过类型参数合并,将泛型类型实例关联到同一份字节码上。
编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。
泛型是经过类型擦除来实现的,编译器在编译时擦除了全部类型相关的信息,因此在运行时不存在任何类型相关的信息。例如 List在运行时仅用一个List来表示。这样作的目的,是确保能和Java 5以前的版本开发二进制类库进行兼容。你没法在运行时访问到类型参数,由于编译器已经把泛型类型转换成了原始类型。code
类型擦除的主要过程以下:
1.将全部的泛型参数用其最左边界(最顶级的父类型)类型替换。
2.移除全部的类型参数。对象
List 是一个未知类型的List,而List 实际上是任意类型的List。
能够把List, List赋值给List,却不能把List赋值给 List。接口
限定通配符
:
对类型进行了限制。有两种限定通配符:开发
泛型类型必须用限定内的类型来进行初始化,不然会致使编译错误。
非限定通配符
:
表示了非限定通配符,由于能够用任意类型来替代。编译器
E - Element (在集合中使用,由于集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
?- 表示不肯定的java类型(无限制通配符类型)
Object - 是全部类的根类,任何类的对象均可以设置给该Object引用变量,使用的时候可能须要类型强制转换,可是用使用了泛型T、E等这些标识符后,在实际用以前类型就已经肯定了,不须要再进行类型强制转换。编译
public V put(K key, V value) { return cache.put(key, value); }