泛型介绍

泛型

  • 通俗的解释来讲就是 标签

设计背景

集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在jdk5之前只能把元素类型设计为Object,jdk5之后使用泛型来解决.因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型.Collection < E >,List< E > ,ArrayList< E > 这个< E > 就是类型参数,即泛型.这个类型参数将在使用时确定

使用泛型的好处

在集合中存储对象并在使用前进行类型转换不方便。泛型防止了那种情况的发生。它提供了编译期的类型安全确保你只能把正确类型的对象放入 集合中,避免了在运行时出现ClassCastException。

Java的泛型是如何工作的?什么是类型擦除?

泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如 List在运行时仅用一个List来表示。这样做的目的,是确保能和Java 5之前的版本开发二进制类库进行兼容。你无法在运行时访问到类型参数,因为编译器已经把泛型类型转换成了原始类型。

泛型与通配符

通配符的几种形式:

  1. 无限定通配符,<?>。
  2. 上限通配符,<? extends User>。表示参数类型只能是User的子类。
  3. 下限通配符,<? super User>。表示参数类型只能是User的父类。

Array中可以用泛型吗?

这可能是Java泛型面试题中最简单的一个了,当然前提是你要知道Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为List可以提供编译期的类型安全保证,而Array却不能。

posted @ 2021-02-22 22:53  longda666  阅读(71)  评论(0)    收藏  举报