Невозможно преобразовать void в java.lang.Void
Я пытаюсь сделать следующее
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
.
Как решить эту проблему?
Ответы
Ответ 1
A 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
}
Ответ 2
Функция возвращает значение. То, что вы ищете, это интерфейс java.util.function.Consumer
. Это имеет метод void accept(T)
и не возвращает значение.
Итак, вы получаете метод:
void update(Collection<String> values, Consumer<String> fn, int ignored) {
// some code
}