java - 为什么我不能使用 LinkedList::new?
问题描述
假设我有一个 HashMap 作为Map<Integer, List<Integer>> map = new HashMap<>();
.
现在List<Integer> values = computeIfAbsent(key, ArrayList::new);
可以完美运行,但List<Integer> values = computeIfAbsent(key, LinkedList::new);
会引发编译错误。
我可以在 ArrayList 和 LinkedList 中看到无参数构造函数。我在这里缺少什么,有人可以解释这种行为吗?
解决方案
您可能打算做的是将初始化的 Lamba 表达式指定为:
List<Integer> values = map.computeIfAbsent(key, a -> new ArrayList<>());
或者
List<Integer> values = map.computeIfAbsent(key, a -> new LinkedList<>());
原因,为什么代码
List<Integer> values = computeIfAbsent(key, LinkedList::new);
不会编译是最接近当前语法的具有单个参数的构造函数需要 aCollection<? extends E> c
而不是 a Integer
,因此无法解析。
另一方面,原因
List<Integer> values = map.computeIfAbsent(key, ArrayList::new);
compiles 是,它有一个接受int
参数的构造函数,但请注意它的列表容量。
推荐阅读
- excel - 将多个已关闭的工作表导入中央工作表
- vba - 运行时错误“13”:定义 PivotCahe 的类型不匹配
- php - 带有 HTML 的正则表达式和 PHP
- json - 拆分后连接字符串行的某些字段
- python - 随机点击按钮
- html - 禁用 Material-UI Stepper 组件的折叠操作
- azure - 对多个 VM 使用虚拟机扩展
- sql-server - 测试 Active Directory 帐户的 SQL Server 连接
- linux - 如何设置 HAProxy 以在匹配的查询字符串键值上断开连接?
- spring - 类中的 MongoTemplate 空指针异常