Лямбдас и дженерики в Java 8

Я играю с будущим выпуском java 8 aka JDK 1.8.

И я узнал, что вы можете легко сделать

interface Foo { int method(); }

и используйте его как

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

который просто печатает 3.

И я также обнаружил, что есть интерфейс java.util.function.Function, который делает это более общим образом. Однако этот код не будет компилировать

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

И мне кажется, что мне сначала нужно сделать что-то вроде

interface IntIntFunction extends Function<Integer, Integer> {}

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

Итак, мне интересно, есть ли другой способ избежать шага IntIntFunction?

Ответы

Ответ 1

@joop и благодарность @edwin.

Основываясь на последней версии JDK 8, это должно сделать это.

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

И в случае, если вам не нравится, вы можете сделать его более гладким с чем-то вроде

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

Поэтому вам не нужно указывать тип или круглые скобки, но вам нужно будет указать параметр при его доступе.