Java 8传递方法作为参数

时间:2014-08-07 15:18:48

标签: java lambda java-8 method-reference

目前正在进入Java 8 lambda表达式和方法引用。

我想传递一个没有args且没有返回值的方法作为另一个方法的参数。我就是这样做的:

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

2 个答案:

答案 0 :(得分:56)

真的没关系; Runnable也会这样做。

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

答案 1 :(得分:37)

您也可以像这样传递lambda:

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

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

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