协变数组和类型擦除

1、数组的协变性:

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

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

2、数组的具体化:

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章