首页 > 解决方案 > 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);
}

怎么了?

标签: java

解决方案


HashSet::add是一个方法引用,可以在任何上下文中使用。由于您引用的是非静态方法,因此必须使用对象调用它,该对象将是this(上下文,var1在 中ObjLongConsumer)。


推荐阅读