泛型介绍
泛型
- 通俗的解释来讲就是 标签
设计背景
集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在jdk5之前只能把元素类型设计为Object,jdk5之后使用泛型来解决.因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型.
Collection < E >,List< E > ,ArrayList< E >这个< E >就是类型参数,即泛型.这个类型参数将在使用时确定
使用泛型的好处
在集合中存储对象并在使用前进行类型转换不方便。泛型防止了那种情况的发生。它提供了编译期的类型安全,确保你只能把正确类型的对象放入 集合中,避免了在运行时出现ClassCastException。
Java的泛型是如何工作的?什么是类型擦除?
泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如 List在运行时仅用一个List来表示。这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。

泛型与通配符
通配符的几种形式:
- 无限定通配符,<?>。
- 上限通配符,<? extends User>。表示参数类型只能是User的子类。
- 下限通配符,<? super User>。表示参数类型只能是User的父类。
Array中可以用泛型吗?
这可能是Java泛型面试题中最简单的一个了,当然前提是你要知道Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为List可以提供编译期的类型安全保证,而Array却不能。

浙公网安备 33010602011771号