首页 >Java >java教程 >为什么我不能向具有通配符泛型类型的 Java 集合添加值(列表

为什么我不能向具有通配符泛型类型的 Java 集合添加值(列表

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-02 19:34:14284浏览

Why Can't I Add Values to a Java Collection with a Wildcard Generic Type (List

具有通配符泛型类型的 Java 集合:添加值

尝试向使用通配符泛型类型声明的 Java 集合添加值时,例如列表,编译器可能会引发错误。当添加的值的类型(例如,Parent p)与集合的预期类型不匹配时,就会发生这种情况。

出于安全原因存在此限制。考虑以下示例:

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); // Unexpected type!

这里,我们定义一个 Child 对象列表,然后从中创建一个通配符通用列表parentList。我们可以安全地从parentList 中检索一个项目并将其转换为Parent。但是,尝试将父对象分配给列表是不允许的,因为它可能与列表元素的实际类型不兼容。

此限制可以防止潜在的运行时类型错误并确保父对象的完整性收集被维护。它允许使用通配符类型从未知集合中读取,同时防止可能损害集合预期行为的修改。

以上是为什么我不能向具有通配符泛型类型的 Java 集合添加值(列表的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn