无法将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 }