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

Java 哪个方法引用可以简化此lambda(Foo-Foo)->;foo.getName()?,java,lambda,Java,Lambda,有人问我如何简化这个lambda (Foo foo) -> foo.getName() 有更好的编写方法吗?Foo::getName 假设getName是一个实例方法,其签名中有一个空参数列表,则效果是创建一个匿名方法,其中一个参数为classFoo,该参数用作实例方法调用的“目标引用”,即方法调用应用的对象。也就是说,它创建了一个方法 return-type anonymousMethod(Foo arg) { return arg.getName(); } 这正是(Foo-

有人问我如何简化这个lambda

(Foo foo) -> foo.getName()

有更好的编写方法吗?

Foo::getName

假设
getName
是一个实例方法,其签名中有一个空参数列表,则效果是创建一个匿名方法,其中一个参数为class
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()
不是。

Foo::getName

假设
getName
是一个实例方法,其签名中有一个空参数列表,则效果是创建一个匿名方法,其中一个参数为class
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()
则不是。

Foo->Foo.getName()
两个答案都正确吗?@您能否将完整的语句与流共享一次以验证。另一方面,
Foo::getName
也可能不正确——请参阅对我答案的编辑。@ajb同意,这就是我认为问题不够清楚的原因。
Foo->Foo.getName()
这两个答案都正确吗?@您能否与流共享完整的语句,以验证一次。另一方面,
Foo::getName
可能也不正确——请参阅对我答案的编辑。@ajb同意,这就是我认为问题不够清楚的原因。