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 super V,? super V,? extends V>
BiFunction super V,? super V,? extends V>
BiFunction super V,? super V,? extends V>
为第三个参数,其中V
是Map
的值。 如果您有一个带有String
值的Map
,则可以使用任何接受两个String
参数并返回String
。
String::concat
满足这些要求,这就是它可以在map.merge
使用的map.merge
。
它满足这些要求的原因需要解释:
String::concat
的签名是public String concat(String str)
。
这可以看作是一个带有两个String类型参数的函数( this
是调用此方法的实例, str
参数)和String类型的结果。