Лямбдас и дженерики в 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;
Поэтому вам не нужно указывать тип или круглые скобки, но вам нужно будет указать параметр при его доступе.