Java8作为参数传递方法

目前正在研究 Java8的 lambda 表达式和方法引用。

我希望将一个没有参数且没有返回值的方法作为参数传递给另一个方法。我是这么做的:

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>,但是我没有发现一个没有参数且不产生结果的接口。

93496 次浏览

这真的无关紧要; Runnable也可以。

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

你也可以像这样传递 lambda:

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


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

通过这种方式,可以直接将 lambda 作为方法传递。