我是一个有用的助手,可以翻译文本。
我正在尝试理解Java中的方法引用如何工作。 乍一看,它非常简单。但是当涉及到这样的事情时就不是那么简单了:
Foo类中有一个方法:
在另一个类 Bar 中,有一个像这样的方法:
"并且使用了方法引用:"
它能够正常运行,但我不明白它是如何与此相匹配的:
转换为中文:BiFunction 方法:
我正在尝试理解Java中的方法引用如何工作。 乍一看,它非常简单。但是当涉及到这样的事情时就不是那么简单了:
Foo类中有一个方法:
public class Foo {
public Foo merge(Foo another) {
//some logic
}
}
在另一个类 Bar 中,有一个像这样的方法:
public class Bar {
public void function(BiFunction<Foo, Foo, Foo> biFunction) {
//some logic
}
}
"并且使用了方法引用:"
new Bar().function(Foo::merge);
它能够正常运行,但我不明白它是如何与此相匹配的:
Foo merge(Foo another)
转换为中文:BiFunction 方法:
R apply(T t, U u);
???
Foo
中的一个方法吗?如果是的话,那么它将是(this, another) BiFunction。 - Elazarmerge(...)
是Foo
类的实例方法,那么它有一个隐含的this
参数。 - Turing85Foo merge(Foo this, Foo that)
一样对待Foo merge(Foo another)
吗?这并不明显。 - user1679671this
参数。编写someObject.doSomethingWith(someOtherObject)
是doSomethingWith(someObject, someOtherObject)
的一种方便(且更具认知吸引力)的替代方法。 - Turing85Foo merge(Foo another)
看成Foo merge(Foo this, Foo another)
。实际上,就是这么回事。你甚至可以声明你的merge
方法以接收this
,它也能正常编译。只不过谁会显式地声明一个不必要的隐式this
参数呢... 但是底层它就是这样工作的。 - fps