问题标签 [unbounded-wildcard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - List > 和 List > 以及如何正确使用?
考虑以下代码段:
- 在这里,我试图了解如何解释这两个陈述
- 表达式:1
- 这里我们说 RHS 上的 List 必须使得列表的所有元素都满足条件
? super List<? super Integer>
- 但是
doubleList
//无论如何都不满足这个条件integerList
-numberList
因为我们期望一个类型是List<? super Integer>
. - 仍然为什么我们在这里没有得到编译错误?
- 这里我们说 RHS 上的 List 必须使得列表的所有元素都满足条件
- 表达:2
- 在这里,我们期望 RHS 上的元素必须是
subtype of List<? super Integer>
- 所以
doubleList
直观上可以看成是一个能满足条件的候选。 - 如果我包含
doubleList
在Arrays.asList
表达式中,为什么仍然会出现编译错误?.
- 在这里,我们期望 RHS 上的元素必须是
- 表达式:1
不确定我是否以正确的方式解释表达式 - 从逻辑上讲它似乎不符合我上面给出的解释可能有什么问题?
java - 过滤流会改变其通配符范围?
下面的方法编译没有问题:
但是,如果我像这样添加一个简单的过滤器:
它会产生以下错误:
不兼容的类型:
java.util.stream.Stream<java.util.Optional<java.lang.Number>> 无法转换为
java.util.stream.Stream<java.util.Optional<? 扩展 java.lang.Number>>
在 openJdk-11 和 openJdk-17 上测试。
我希望他们都做同样的事情(要么都编译好,要么都产生相同的编译错误),所以我对此感到非常困惑:这里的一般规则是什么,解释了为什么第一种方法可以编译但第二种方法才不是?谢谢!