Collector<Widget, ?, TreeSet<Widget>> intoSet =
Collector.of(TreeSet::new, TreeSet::add,
(left, right) -> { left.addAll(right); return left; });
Collector.of方法的返回类型为static <T,R> Collector<T,R,R>
在示例代码的返回类型中,问号是否只是一种方便地引用下一个泛型类型的方式,因为这两个类型在方法签名中被声明为相同的。以下三个语句是否完全相同:
Collector<Widget, ?, TreeSet<Widget>> intoSet =
Collector.of(TreeSet::new, TreeSet::add,
(left, right) -> { left.addAll(right); return left; });
Collector<Widget, TreeSet<Widget>, TreeSet<Widget>> intoSet =
Collector.of(TreeSet::new, TreeSet::add,
(left, right) -> { left.addAll(right); return left; });
Collector<Widget, TreeSet<Widget>, ?> intoSet =
Collector.of(TreeSet::new, TreeSet::add,
(left, right) -> { left.addAll(right); return left; });
?
通配符,因为编译器能够推断所有的Collector
类型变量,而不需要显式声明为TreeSet
。这三个语句并不完全相同,但是如果意图是使用Collector
执行Stream.collect(Collector)
,那么它们都可以正常工作。 - M A