擦除类型参数

时间:2018-04-02 09:07:20

标签: java generics

我有一个如下课程:

public class MyList<E> {
    private List<E> list;
    public void setList(List<E> list) {
        this.list = list;
    }
    public List<E> getList() {
        return list;
    }

}

我读到在类型擦除之后,所有类型参数E都被Object替换。因此,在类型擦除后,该课程将成为:

public class MyList {
    private List<Object> list;
    public void setList(List<Object> list) {
        this.list = list;
    }
    public List<Object> getList() {
        return list;
    }

}

List<String>无法分配给List<Object>。但我们可以将List<String>传递给setter方法,如下所示:

MyList<String> ml = new MyList<String>();
List<String> list = new ArrayList<String>();
ml.setList(list);

这背后的原因是什么?

1 个答案:

答案 0 :(得分:2)

类型在编译后被删除但在此之前编译器会检查所有类型是否一致,因此您无法提供List<Object>预期List<String>的位置。

以下是Baeldung's article关于类型擦除的摘录。

  

编译器确保代码的类型安全并防止运行时   错误。

相关问题