我用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);
答案 0 :(得分:6)
是的,根据JLS中引用的示例:
Task t = () -> System.out.println("hi"); Runnable r = t::invoke;
此外,还说明如下:
方法引用表达式在赋值上下文 [强调我的],调用上下文或具有目标类型T的强制转换上下文中是兼容的,如果T是函数接口类型(第9.8节)和表达式与从T派生的地面目标类型的函数类型一致。