gpt4 book ai didi

java - 为什么有 而不是

转载 作者:行者123 更新时间:2023-11-30 08:23:01 24 4
gpt4 key购买 nike

为什么会有<?e extends T>而不是 <T>在不可修改的 API 中 java.util.Collections例如考虑 unmodifiableLis接口(interface)

public static <T> List<T> unmodifiableList(List<? extends T> list)

为什么不呢,只是

public static <T> List<T> unmodifiableList(List<T> list)

编辑:这不是 When do Java generics require instead of and is there any downside of switching 的副本.那道题打算找出<? extends T>的重要性在 <T>如果从一个更改为另一个,将会产生什么影响。我理解这两种语法( <? extends T><T> )的区别,但是在不可修改的集合 API 的情况下,上下文(以及因此我的问题)是不同的。

最佳答案

这样你就可以做这样的事情:

List<Integer> intList = new ArrayList<Integer>();
// . . . populate intList

// now create an unmodifiable version:
List<Number> numList = Collections.unmodifiableList(intList);

请注意,因为泛型不是协变的,所以您不能从 List<Integer> 赋值。到 List<Number> :

numList = intList;

即使每个元素都是赋值兼容的。如果您更改了 unmodifiableList 的签名正如您所建议的那样,它会遇到同样的问题(因为一旦参数被绑定(bind),我的示例中的返回类型将被强制为 List<Integer>)。

关于java - 为什么有 <?在 java.util.Collections.unmodifiableList API 中扩展 T> 而不是 <T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976344/

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