提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> strings = new ArrayList<>();
List<Integer> integers = new ArrayList<>();
System.out.println(strings.getClass() == integers.getClass());
}
}
true
- 在编译阶段,编译器会进行类型检测,如果我们传入一个错误的类型,就会编译失败,但是一旦通过编译,就会进行泛型擦除
- 到了运行阶段时,对于JVM来说就没有了泛型类型的对象,所有的对象都属于普通类
List strings = new ArrayList<>();
List integers = new ArrayList<>();
-
一个泛型类或者泛型方法,经过泛型擦除后,其中的类型参数都会被替换为他最顶层的上界
-
没有边界是,就会替换为顶层父类——Object
-
泛型是jdk 5 引入的,泛型擦除后的代码,和java1.5 之前是一样的,泛型擦除的目的就是【向低版本兼容】
-
泛型参数不支持基本数据类型,只支持引用数据类型,因为泛型会被擦除为具体的类型,而Object又不能存储基本数据类型
-
运行时,只能对原始数据类型进行检测,无法判断带泛型的类型
- 不能实例化类型参数(因为在运行时无法确定具体类型,也不能确定T是否带无参构造器)