web-dev-qa-db-fra.com

Java Méthode à 8 passes en tant que paramètre

J'entre actuellement dans Java 8 expressions lambda et références de méthodes.

Je souhaite transmettre une méthode sans argument ni valeur de retour comme argument d'une autre méthode. Voici comment je le fais:

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();
}

Je sais qu’il existe un ensemble d’interfaces fonctionnelles prédéfinies dans Java.util.function comme Function<T,R> mais je n'en ai trouvé aucun sans arguments et ne produisant aucun résultat.

67
Torsten Römer

Ce n'est pas grave Runnable le fera aussi.

Consumer<Void>,
Supplier<Void>,
Function<Void, Void>
57
Joop Eggen

Vous pouvez aussi passer lambda comme ceci:

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

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

De cette façon, vous passez directement lambda comme méthode.

40
obey