Pour le moment il n'y a rien de précis sur le contenu exact des closures de Java 7. Mais la proposition Closures for Java 0.6a se présente comme un compromis des différentes propositions et est considéré comme le document de travail pour leurs intégrations.
Dans cette proposition on peut obtenir une closure depuis la référence d'une méthode, c'est à dire approximativement quelque-chose comme cela :
1 2 3 4 5 6
| // l'objet "this" doit contenir une méthode myMethod(ActionEvent)
// On affecte alors la référence de la méthode à la closure :
#void(ActionEvent) myClosure = this#myMethod(ActionEvent);
// Ceci est alors équivalent à : this.myMethod(event);
myClosure.invoke(event); |
Mais une closure peut également être convertie en une interface compatible, donc on pourrait également écrire ceci :
1 2 3 4
| ActionListener myListener = this#myMethod(ActionEvent);
// Ceci est alors équivalent à : this.myMethod(event);
myListener.actionPerformed(event); |
Du coup, on devrait pouvoir écrire quelque chose comme cela :
this.addActionListener( this#myMethod(ActionEvent) );
Et je peux me tromper puisque je ne retrouve pas la source, mais il me semble avoir vu des discussions indiquant que les MethodHandles pourraient alors être utilisé de manière totalement transparente pour faire cela.
Envoyé par
ZedroS
Concernant les delegates C# et leur équivalent Java, j'avais dans l'idée que des anonymous inner class pouvaient faire l'affaire. Je me trompe ?
Oui mais c'est vraiment très verbeux
a++
Partager