Tus*_*kar 1 java java-8 method-reference
编译器如何确保以下语句的等效lambda
BinaryOperator<String> concatOperator = String::concat;
Run Code Online (Sandbox Code Playgroud)
是
BinaryOperator<String> concatOperator = (resultString, inputString) -> resultString.concat(inputString);
Run Code Online (Sandbox Code Playgroud)
并不是
BinaryOperator<String> concatOperator = (resultString, inputString) -> inputString.concat(resultString);
Run Code Online (Sandbox Code Playgroud)
JLS中充分记录了此行为
15.13.3。方法引用的运行时评估
如果编译时声明是实例方法,则目标引用是调用方法的第一个形式参数。否则,没有目标参考。
如果编译时声明是实例方法,则方法调用表达式的参数(如果有)是调用方法的第二个和后续形式参数。否则,方法调用表达式的参数是调用方法的形式参数。
而且似乎合理且直观。如果采用带有arity n(n > 2)的方法,则很明显,目标引用应该是第一个参数,而不是最后一个参数,而不是中间的参数。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |