gpt4 book ai didi

java - 哪个方法引用可以简化这个 lambda (Foo foo) -> foo.getName()?

转载 作者:行者123 更新时间:2023-12-02 03:03:57 29 4
gpt4 key购买 nike

有人问我如何简化这个 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com