它是关于未来变化的 API 规定。事实上,一个ArrayList返回:public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}但是规范告诉我们的是,该toList()方法并未设计/参与以返回特定的List实现。今天,实现显示已ArrayList返回,但明天,新的 Java 版本可能会返回另一个实现(为什么不是不可变列表)。因此,该方法的客户不应考虑(至少在理论上)ArrayList将始终返回 an 。作为旁注,Collectors.toCollection(Supplier)允许客户提供用于收集的集合。虽然很少使用,但您可以使用它来保证ArrayList使用 an :List<String> list = l.stream().collect(Collectors.toCollection(ArrayList::new));