Java 8 中的 Lambdas 和泛型

2022-09-03 15:58:05

我正在玩未来的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

@joop和@edwin谢谢。

基于最新版本的JDK 8,这应该可以做到这一点。

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

如果你不喜欢,你可以用这样的东西让它更光滑一些

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

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


答案 2

推荐