gpt4 book ai didi

java - 通配符符号的主要意图或目的?延伸 T'

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:51 29 4
gpt4 key购买 nike

我对集合中使用的通用通配符表示法有一些(违反直觉的)观察。通配符的目的 List<? extends T>是允许列表(T 的子类型)的赋值到“?”列表的引用的 T'。它的目的不是特别允许将 T 的子类型的元素添加到列表中( of '? of T' ),即使在 List<T> 中也是可能的。 .

    List<Number> list = new ArrayList<Integer>(); // invalid , List<Integer> is not assignable to List<Number>

List<Number> list = new ArrayList<Number>() ; // OK

list.add(new Integer(1)); // valid , '? extends Number' not needed!

List<? extends Number> list1 = new ArrayList<Integer>(); // Valid , because of notation '? extends Number'

我的观察是否正确?

最佳答案

是的,您的观察是正确的。但是,在您显示的情况下,它不是很有用(您选择忽略有关列表的有用信息)。当您调用库函数时,赋值是隐式的更有用。

例如,假设您有一个关闭 InputStreams 集合的库函数。你可以接受 List<InputStream> ,但这是不必要的限制。你可以改为这样做:

public void closeAll(Collection<? extends InputStream> streams) {
for ( InputStream stream : streams ) {
stream.close();
}
}

现在你可以传入 List<FileInputStream>相反。

关于java - 通配符符号的主要意图或目的?延伸 T',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6279331/

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