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

2022-09-01 15:09:48

我正在尝试执行以下操作

interface Updater {
    void update(String value);
}

void update(Collection<String> values, Updater updater) {
    update(values, updater::update, 0);
}

void update(Collection<String> values, Function<String, Void> fn, int ignored) {
    // some code
}

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

"Cannot convert void to java.lang.Void"

这意味着不能用作 。updater::updateFunction<String, Void>

当然,我不能写,我不想将返回类型更改为.Function <String, void>update()Void

如何解决此问题?


答案 1

A 返回一个值,即使它被声明为类型(您必须返回。相反,一个方法实际上不返回任何内容,甚至不返回 。因此,您必须插入以下语句:FunctionVoidnullvoidnullreturn

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

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

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

答案 2

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

所以你的方法变成:

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

推荐