Comment Runnable est créé à partir de Java8 lambda

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)