如何使用lambda返回通用功能接口的实例?

时间:2015-04-17 23:58:46

标签: java generics lambda

这不起作用:

interface GenericFunctionalInterface {
    <T> void doSomething(T obj);
}
public class Foo {
    public final static GenericFunctionalInterface instance =
            (GenericFunctionalInterface) (a) -> {
                System.out.println(a);
    };
}

实例化instance的正确语法是什么?

注意

如副本所示,泛型方法无法简化为lambda表达式。但是要为此添加一些内容,只要方法参数的类型在接口的泛型类型约束内,就可以使用方法地址表示法来表示通用或不通用的方法。

例如,我们可以写instance = System.out::println;因为T extends Object,但我们无法写instance = Number::doubleValue;,因为T不会延伸Number(不在<T extends Number> void doSomething(T obj)内类型约束)。当然,如果我们写了Number::doubleValue;,我们可以将其定义为{{1}}。

另见method reference capture

0 个答案:

没有答案