我试图做以下事情
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::update
不能用作Function<String, Void>
。
我当然不能写Function <String, void>
,我也不想将update()
的返回类型更改为Void
。
如何解决此问题?
答案 0 :(得分:29)
Function
返回一个值,即使它被声明为Void
类型(那么你必须返回null
。相比之下,void
方法确实没有返回任何内容,甚至不返回null
。所以你必须插入return
语句:
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
}
答案 1 :(得分:11)
函数返回一个值。您正在寻找的是java.util.function.Consumer
界面。这有一个void accept(T)
方法,不会返回值。
所以你的方法变成了:
void update(Collection<String> values, Consumer<String> fn, int ignored) {
// some code
}