问题
Currently getting into Java 8 lambda expressions and method references.
I want to pass a method with no args and no return value as argument to another method. This is how I am doing it:
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();
}
I know there is a set of predefined functional interfaces in java.util.function such as Function<T,R>
but I didn't find one with no arguments and not producing a result.
回答1:
It really does not matter; Runnable
will do too.
Consumer<Void>,
Supplier<Void>,
Function<Void, Void>
回答2:
You can also pass lambda like this:
public void pass() {
run(()-> System.out.println("Hello world"));
}
public void run(Runnable function) {
function.run();
}
In this way, you are passing lambda directly as method.
来源:https://stackoverflow.com/questions/25186216/java-8-pass-method-as-parameter