I'm trying to do the following
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 }
but I get this compiler error:
"Cannot convert void to java.lang.Void"
That means updater::update
cannot be used as Function<String, Void>
.
Of course I can't write Function <String, void>
and I don't want to change return type of update()
to Void
.
How do I resolve this problem?
A Function
returns a value, even if it is declared as being of type Void
(you will have to return null
then. In contrast, a void
method really returns nothing, not even null
. So you have to insert the return
statement:
void update(Collection<String> values, Updater updater) { update(values, s -> { updater.update(); return null; }, 0); }
An alternative would be to change the Function<String,Void>
to Consumer<String>
, then you can use the method reference:
void update(Collection<String> values, Updater updater) { update(values, updater::update, 0); } void update(Collection<String> values, Consumer<String> fn, int ignored) { // some code }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With