java - 删除类型参数

标签 java generics

我有一个如下所示的类(class):

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);

这背后的原因是什么?

最佳答案

编译后类型会被删除,但在此之前编译器会检查所有类型是否一致,因此您不能给出 List<Object>其中 List<String>预计。

这是 Baeldung's article 的摘录关于类型删除。

The compiler ensures type safety of our code and prevents runtime errors.

关于java - 删除类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608365/

相关文章:

java - 在泛型类中实例化泛型类

java - Java Iterator 是否持有对链表元素的引用?

java - 阅读文本并打印出其中的日期

java - 拒绝后无法清除表单输入

java - 让MPart监听eventBroker事件

java - 使用泛型匹配参数和返回类型

ios - 带有 nil 包装的自定义 flatMapLatest

c# - List<T> 缺少 .NET Native 序列化代码

c# - AutoMapper 通用转换

swift - 如何创建通用的 UITableviewCell,它可以通过委托(delegate)或其他方式将通用数据类型传递给主 UIViewController?