Java 8中的Lambdas和泛型

时间:2012-12-07 10:38:06

标签: java lambda java-8

我正在玩未来的Java 8版本,即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 个答案:

答案 0 :(得分:5)

@joop和@edwin谢谢。

基于最新版本的JDK 8,应该这样做。

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

如果您不喜欢,可以使用

之类的内容使其更加流畅
IntFunction times3 = triple -> 3 * (Integer) triple;

因此,您无需指定类型或括号,但在访问时需要强制转换参数。