首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种方法引用可以简化此lambda (Foo foo) -> foo.getName()?

哪种方法引用可以简化此lambda (Foo foo) -> foo.getName()?
EN

Stack Overflow用户
提问于 2017-02-03 06:21:23
回答 1查看 221关注 0票数 1

我被问到如何简化这个蓝宝石

代码语言:javascript
复制
(Foo foo) -> foo.getName()

有什么更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-03 07:05:09

Foo::getName

假设getName是一个实例方法,其签名中包含一个空参数列表,那么其效果是创建一个具有类Foo的一个参数的匿名方法,该方法使用该参数作为实例方法调用的“目标引用”,即方法调用应用到的对象。也就是说,它创建了一个方法

代码语言:javascript
复制
return-type anonymousMethod(Foo arg) {
    return arg.getName();
}

这正是(Foo foo) -> foo.getName();所做的。

另一方面,这个方法引用:

代码语言:javascript
复制
abc::getName()

创建一个没有参数的匿名方法,该方法返回abc.getName(),其中abc是在lambda之外定义的。

编辑:--我刚刚意识到这个答案并不完全正确;在某些情况下,(Foo foo) -> foo.getName()不能简化为Foo::getName。当Foo声明两个如下所示的方法时,就会发生这种情况:

代码语言:javascript
复制
public String getName() { ... }
public static String getName(Foo foo) { ... }

现在,Foo::getName是模棱两可的(因此是非法的),而(Foo foo) -> foo.getName()则不是。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42017991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档