协变数组和类型擦除

来源:互联网 发布:windows10自带录屏软件 编辑:程序博客网 时间:2024/06/05 16:51

1、数组的协变性:

数组的协变性指的是:如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类。

而泛型是不可变的,List<Integer>不是List<Object>的基类,更不会是它的子类。

2、数组的具体化:

数组是具体化的,而泛型在运行时是被擦除的。

数组是在运行时才去判断数组元素的类型约束。

而泛型正好相反,在运行时,泛型的类型信息是会被擦除的,只有编译的时候才会对类型进行强化。
java泛型是编译器泛型,是一种语法糖,生成的二进制代码是没有泛型,jvm感受不到泛型。java的泛型编译生成二进制代码的时候,进行了类型的擦除,放入集合,放入集合的实际上是object类型,从集合中获取对象的时候,获取的是object类型,然后进行了强制类型转换,转换成实际的类型。

原创粉丝点击