gpt4 book ai didi

java - 无法使用通配符泛型类型向 Java 集合添加值

转载 作者:太空宇宙 更新时间:2023-11-04 12:10:28 27 4
gpt4 key购买 nike

为什么此代码无法编译(Parent 是一个接口(interface))?

List<? extends Parent> list = ...
Parent p = factory.get(); // returns concrete implementation
list.set(0, p); // fails here: set(int, ? extends Parent) cannot be applied to (int, Parent)

最佳答案

这样做是为了安全。想象一下如果它有效:

List<Child> childList = new ArrayList<Child>();
childList.add(new Child());

List<? extends Parent> parentList = childList;
parentList.set(0, new Parent());

Child child = childList.get(0); // No! It's not a child! Type safety is broken...

List<? extends Parent>的含义是“这是扩展 Parent 的某种类型的列表。我们不知道哪种类型 - 它可能是 List<Parent>List<Child>List<GrandChild> 。”这样就可以安全地获取 List<T> 中的任何项目 API 并从 T 转换至Parent ,但调用 List<T> 并不安全。 API 从 Parent 转换至T ...因为该转换可能无效。

关于java - 无法使用通配符泛型类型向 Java 集合添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39912025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com