Подтвердить что ты не робот

Метод Java 8 pass в качестве параметра

В настоящее время вы попадаете в Java лямбда-выражения и ссылки на методы.

Я хочу передать метод без аргументов и никакого возвращаемого значения в качестве аргумента другому методу. Вот как я это делаю:

public void one() {
    System.out.println("one()");
}

public void pass() {
    run(this::one);
}

public void run(final Function function) {
    function.call();
}

@FunctionalInterface
interface Function {
    void call();
}

Я знаю, что существует набор предопределенных функциональных интерфейсов в java.util.function, например Function<T,R>, но я не нашел ни одного аргумента без аргументов и не создавал результат.

4b9b3361

Ответ 1

Это действительно неважно; Runnable тоже сделает.

Consumer<Void>,
Supplier<Void>,
Function<Void, Void>

Ответ 2

Вы также можете передать лямбда следующим образом:

public void pass() {
    run(()-> System.out.println("Hello world"));
}

public void run(Runnable function) {
    function.run();
}

Таким образом, вы передаете лямбда непосредственно как метод.