小编Sud*_*mar的帖子

Java 类型擦除和数组

oracle 文档说泛型是使用一种技术调用类型擦除在 java 中实现的,这就是它的工作原理。

  1. 如果类型参数无界,则将泛型类型中的所有类型参数替换为其边界或对象。因此,生成的字节码仅包含普通的类、接口和方法。
  2. 如有必要,请插入类型转换以保持类型安全。
  3. 生成桥接方法以保留扩展泛型类型中的多态性。

因此,如果我有一个通用类,请说 Container 如下:

class Container<T>{
T initialValue;
List<T> valueList=new ArrayList<T>();
public List<T> getValueList(){
  return valueList;
}

}
Run Code Online (Sandbox Code Playgroud)

经过类型擦除处理后,它的等效类看起来像这样:

class Container{
    Object initialValue;
    List valueList=new ArrayList();
    public List getValueList(){
      return valueList;
    }

    }
Run Code Online (Sandbox Code Playgroud)

如果这里有错请指正

同样,如果将上面的类修改如下

class Container<T>{
    T initialValue;
    List<T> valueList=new ArrayList<T>();
    T[] arrayValue;
    public Container(T[] array){
       arrayValue=array;
     }
    public List<T> getValueList(){
      return valueList;
    }

    }
Run Code Online (Sandbox Code Playgroud)

这不等于吗???

class Container{
    Object initialValue;
    List valueList=new ArrayList();
    Object[] arrayValue;
    public Container(Object[] array){
       arrayValue=array;
     }
    public List getValueList(){ …
Run Code Online (Sandbox Code Playgroud)

java arrays generics type-erasure

2
推荐指数
1
解决办法
1830
查看次数

标签 统计

arrays ×1

generics ×1

java ×1

type-erasure ×1