Java 8:是否可以为变量分配方法引用?

时间:2014-09-10 23:17:19

标签: java

我用Google搜索了这个问题的答案,但找不到答案。

在Java 8中,我知道这是可能的:

// someMethod is defined as: someMethod(AFunctionalInterface i)
someMethod(someObject::someOtherMethod);

问题是:是否可以执行以下操作

AFunctionalInterface i = anObject::SomeMethod;

另外,是否可以将lambda分配给变量并传递给它,就像这样?

Printer f = () -> System.out.println(..); methodThatTakesPrinter(f);

1 个答案:

答案 0 :(得分:6)

是的,根据JLS中引用的示例:

Task t = () -> System.out.println("hi");
Runnable r = t::invoke;

此外,还说明如下:

  

方法引用表达式在赋值上下文 [强调我的],调用上下文或具有目标类型T的强制转换上下文中是兼容的,如果T是函数接口类型(第9.8节)和表达式与从T派生的地面目标类型的函数类型一致。