有人问我如何简化这个 lambda
(Foo foo) -> foo.getName()
还有更好的写法吗?
最佳答案
Foo::getName
。
假设getName
是一个实例方法,其签名中的参数列表为空,那么效果是创建一个带有Foo类的一个参数的匿名方法
,使用该参数作为实例方法调用的“目标引用”,即方法调用适用的对象。也就是说,它创建了一个方法
return-type anonymousMethod(Foo arg) {
return arg.getName();
}
这正是 (Foo foo) -> foo.getName();
所做的。
另一方面,这个方法引用:
abc::getName()
创建一个没有参数的匿名方法,该方法返回 abc.getName()
,其中 abc
在 lambda 外部定义。 p>
编辑:我刚刚意识到这个答案并不完全正确;在某些情况下,(Foo foo) -> foo.getName()
不能简化为Foo::getName
。当 Foo
声明两个如下所示的方法时,就会发生这种情况:
public String getName() { ... }
public static String getName(Foo foo) { ... }
现在 Foo::getName
是不明确的(因此是非法的),而 (Foo foo) -> foo.getName()
则不是。
关于java - 哪个方法引用可以简化这个 lambda (Foo foo) -> foo.getName()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42017991/