我被问到如何简化这个蓝宝石
(Foo foo) -> foo.getName()有什么更好的方法吗?
发布于 2017-02-03 07:05:09
Foo::getName。
假设getName是一个实例方法,其签名中包含一个空参数列表,那么其效果是创建一个具有类Foo的一个参数的匿名方法,该方法使用该参数作为实例方法调用的“目标引用”,即方法调用应用到的对象。也就是说,它创建了一个方法
return-type anonymousMethod(Foo arg) {
return arg.getName();
}这正是(Foo foo) -> foo.getName();所做的。
另一方面,这个方法引用:
abc::getName()创建一个没有参数的匿名方法,该方法返回abc.getName(),其中abc是在lambda之外定义的。
编辑:--我刚刚意识到这个答案并不完全正确;在某些情况下,(Foo foo) -> foo.getName()不能简化为Foo::getName。当Foo声明两个如下所示的方法时,就会发生这种情况:
public String getName() { ... }
public static String getName(Foo foo) { ... }现在,Foo::getName是模棱两可的(因此是非法的),而(Foo foo) -> foo.getName()则不是。
https://stackoverflow.com/questions/42017991
复制相似问题