API中的奇怪语法“String :: concat”

我正在研究使用1.8对Java SE API所做的一些更改,我在查看新方法Map.merge时,它显示了如何将其与行一起使用的示例

map.merge(key, msg, String::concat) 

我理解如何使用lambda表达式来创建匿名function接口,但这似乎使用一个方法作为BiFunction。 我喜欢理解和使用晦涩的java语法,但我无法在任何地方找到任何提及。

String::concat是对String类的concat()方法的引用。

BiFunction是一个带有单个方法apply的函数接口,它接受两个参数(第一个类型为T ,第二个类型为U ),并返回一个类型为R的结果(换句话说,接口BiFunction有一个方法R apply(T t, U u) )。

map.merge期望一个BiFunction BiFunction BiFunction为第三个参数,其中VMap的值。 如果您有一个带有String值的Map ,则可以使用任何接受两个String参数并返回String

String::concat满足这些要求,这就是它可以在map.merge使用的map.merge

它满足这些要求的原因需要解释:

String::concat的签名是public String concat(String str)

这可以看作是一个带有两个String类型参数的函数( this是调用此方法的实例, str参数)和String类型的结果。