为什么下面的代码生成一个对象而不是列表?
Object listWithoutGeneric = new ArrayList().stream().collect(Collectors.toList());
(试图用List listWithoutGeneric = ...替换为Object listWithoutGeneric = ...产生编译错误)
以下示例返回列表时?
List listWithDefaultGeneric = new ArrayList<>().stream().collect(Collectors.toList());
您的终端操作-collect
-具有以下签名:
<R, A> R collect(Collector<? super T, A, R> collector)
即它返回类型为R
的实例。
[toList()
Collector
返回Collector<T, ?, List<T>>
,因此在这种情况下,R
是List<T>
。
但是,如果要从原始Stream
创建ArrayList
,则Stream
也是原始的,因此R
变为Object
。