java - HashSet::add 用法不会导致“无法从静态上下文引用非静态方法”
问题描述
Set<Long> testSet = new Random().longs(100, 1000000000L, 999999999999L).collect(HashSet::new, HashSet::add, HashSet::addAll);
这段代码工作正常,但我希望它说,我用静态上下文引用非静态方法。此外,HashSet.add 方法确实适合 ObjLongConsumer 的签名。
收集定义:
<R> R collect(Supplier<R> var1, ObjLongConsumer<R> var2, BiConsumer<R, R> var3);
ObjLongConsumer:
@FunctionalInterface
public interface ObjLongConsumer<T> {
void accept(T var1, long var2);
}
怎么了?
解决方案
HashSet::add
是一个方法引用,可以在任何上下文中使用。由于您引用的是非静态方法,因此必须使用对象调用它,该对象将是this
(上下文,var1
在 中ObjLongConsumer
)。
推荐阅读
- php - 如何使用 PHP 在重定向页面中检索原始 url
- python - Pandas - 如何删除包含比标题更少的字段的行
- python - 通过读取标题来大写 CSV 列
- c - 使用属性“text”从 GtkEntry 获取文本
- dialogflow-es - Dialogflow textToSpeech 实现未大声朗读文本
- javascript - 如何修复 clearInterval() 不停止间隔?
- python-3.x - 有什么方法可以比较移动轨道上类似物体的方向角度吗?
- api - 如何将 Boondmanager ERP 的 PHP 中的 SOAP API 与 Talend 连接
- powerbi - 使用 Power BI 探索 Apache Kylin 多维数据集?
- pointers - 在方括号中添加两个寄存器是什么意思?