J’ai rencontré un code que j’ai du mal à comprendre malgré un peu de lecture. Il existe un appel à une méthode qui prend deux arguments, dont l’un est Runnable. Plutôt que de transmettre un object Runnable alors qu’il existe un lambda.
Par exemple:
Classe publique LambdaTest {private final Lock lock = new ReentrantLock (); @Test public void createRunnableFromLambda () {Locker.runLocked (lock, () -> {System.out.println ("hello world");}); } public static class Locker {public static void runLocked (Verrouillage de locking, Bloc d'exécution) {lock.lock (); try {block.run (); } finally {lock.unlock (); }}}}
Donc ma question est, pouvez-vous expliquer comment un Runnable est créé à partir du lambda, et s’il vous plaît, quelqu’un pourrait-il expliquer la syntaxe () -> {}. Plus précisément, que signifient les crochets ()?
Merci.
Un Lambda peut être utilisé à n’importe quel endroit où une interface fonctionnelle est requirejse. Une interface fonctionnelle est une interface avec une seule méthode abstraite.
La syntaxe lambda utilisée dans ce cas est (arguments) -> {blockOfCodeOrExpression}
. La parenthèse peut être omise dans le cas d’un seul argument et les accolades dans le cas d’une commande ou d’une expression unique.
En d’autres termes, () -> System.out.println("hello world");
est équivalent à
new Runnable(){ @Override public void run(){ System.out.println("Hello world one!"); } };
(Je suis à peu près sûr que ce n’est pas l’équivalent du bytecode, mais son équivalent en termes de fonctionnalités)