API"String :: concat"中的奇怪语法

yes*_*nes 6 java lambda java-8

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

map.merge(key, msg, String::concat)
Run Code Online (Sandbox Code Playgroud)

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

Era*_*ran 5

String::concatconcat()对String类的方法的引用.

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

map.merge期望a BiFunction<? super V,? super V,? extends V>作为第三个参数,其中V的值是Map.如果你有Map一个String值,你可以使用接受任何两个方法String的参数和返回String.

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

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

签名String::concatpublic String concat(String str).

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

  • 此处描述了方法引用:http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html (2认同)