Lambdas et génériques en Java 8


Je joue avec la future version java 8 aka JDK 1.8.

Et j'ai découvert que vous pouvez facilement faire

interface Foo { int method(); }

Et l'utiliser comme

Foo foo = () -> 3;
System.out.println("foo.method(); = " + foo.method());

Qui imprime simplement 3.

Et j'ai aussi trouvé qu'il y a un java.util.fonction.Interface de fonction qui le fait de manière plus générique. Cependant, ce code ne compilera pas

Function times3 = (Integer triple) -> 3 * triple;
Integer twelve = times3.map(4);

Et il semble que je doive d'abord faire quelque chose comme

interface IntIntFunction extends Function<Integer, Integer> {}

IntIntFunction times3 = (Integer triple) -> 3 * triple;
Integer twelve = times3.map(4);

Je me demande donc s'il existe un autre moyen d'éviter le IntIntFunction étape?

Author: Natan Cox, 2012-12-07

1 answers

@joop et @ edwin merci.

Basé sur la dernière version de JDK 8, cela devrait le faire.

IntFunction<Integer> times3 = (Integer triple) -> 3 * triple;

Et au cas où vous n'aimeriez pas, vous pouvez le rendre un peu plus lisse avec quelque chose comme

IntFunction times3 = triple -> 3 * (Integer) triple;

Vous n'avez donc pas besoin de spécifier un type ou des parenthèses, mais vous devrez convertir le paramètre lorsque vous y accéderez.

 5
Author: Natan Cox, 2012-12-10 10:39:16