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

时间:2014-07-18 01:54:29

标签: java lambda java-8

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

map.merge期望BiFunction<? super V,? super V,? extends V>作为第三个参数,其中VMap的值。如果您的Map值为String,则可以使用任何接受两个String参数的方法并返回String

String::concat满足这些要求,这就是为什么可以在map.merge中使用它。

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

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

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