ape*_*ite 2 java java-8 method-reference
假设我有一个HashMap作为Map<Integer, List<Integer>> map = new HashMap<>();。
现在List<Integer> values = computeIfAbsent(key, ArrayList::new);可以正常工作,但是List<Integer> values = computeIfAbsent(key, LinkedList::new);会引发编译错误。
我可以在ArrayList和LinkedList中看到no-arg构造函数。我在这里想念的是什么,有人可以解释这种现象吗?
您可能打算做的是将要初始化的lamba表达式指定为:
List<Integer> values = map.computeIfAbsent(key, a -> new ArrayList<>());
Run Code Online (Sandbox Code Playgroud)
要么
List<Integer> values = map.computeIfAbsent(key, a -> new LinkedList<>());
Run Code Online (Sandbox Code Playgroud)
原因,为什么要代码
List<Integer> values = computeIfAbsent(key, LinkedList::new);
Run Code Online (Sandbox Code Playgroud)
无法编译的是最接近当前语法且带有单个参数的构造函数期望使用a Collection<? extends E> c而不是an Integer,因此无法解析。
另一方面,为什么
List<Integer> values = map.computeIfAbsent(key, ArrayList::new);
Run Code Online (Sandbox Code Playgroud)
compiles是,它具有接受int参数的构造函数,但请注意其对于列表的容量。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |