无法将void转换为java.lang.Void

我正在尝试做以下事情

interface Updater { void update(String value); } void update(Collection values, Updater updater) { update(values, updater::update, 0); } void update(Collection values, Function fn, int ignored) { // some code } 

但我得到这个编译器错误:

 "Cannot convert void to java.lang.Void" 

这意味着updater::update不能用作Function

当然我不能写Function 而且我不想将update()返回类型更改为Void

我该如何解决这个问题?

Function返回一个值,即使它被声明为Void类型(你必须返回null 。相比之下, void方法实际上不返回任何内容,甚至不返回null 。所以你必须插入return语句:

 void update(Collection values, Updater updater) { update(values, s -> { updater.update(); return null; }, 0); } 

另一种方法是将Function更改为Consumer ,然后可以使用方法引用:

 void update(Collection values, Updater updater) { update(values, updater::update, 0); } void update(Collection values, Consumer fn, int ignored) { // some code } 

函数返回一个值。 您正在寻找的是java.util.function.Consumer接口。 这有一个void accept(T)方法,不返回值。

所以你的方法变成:

 void update(Collection values, Consumer fn, int ignored) { // some code }