Vic*_*azi 7 java lambda closures java-8 method-reference
我无法理解语法的方法参考,那里有两个参数a与b和参考是的方法a上b.
例如我明白了
Arrays.sort(personArray, comparators::compareByName);
Run Code Online (Sandbox Code Playgroud)
相当于
Arrays.sort(personArray, (o1, o2) -> comparators.compareByName(o1, o2));
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,lambda参数与方法调用参数匹配(o1, o2).
这个lambda的情况如何
stream.sorted((o1, o2) -> o1.compareToIgnoreCase(o2));
Run Code Online (Sandbox Code Playgroud)
我的IDE告诉我这相当于:
stream.sorted(String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
我没有找到替换该语法的规则:a.method(b)使用方法引用.
例如,如果lambda有三个或更多参数怎么办?这合法吗?第一个参数是否成为方法目标,剩下的参数是否成为参数?
我想你正在寻找JLS第15.13.3节,其中包括:
如果是表单
ReferenceType :: [TypeArguments] Identifier,则调用方法的主体同样具有编译时声明的方法调用表达式的效果,该声明是方法引用表达式的编译时声明.方法调用表达式的运行时评估如§15.12.4.3,§15.12.4.4和§15.12.4.5中所规定,其中:
调用模式源自§15.12.3中指定的编译时声明.
如果编译时声明是实例方法,则目标引用是调用方法的第一个形式参数.否则,没有目标参考.
如果编译时声明是实例方法,则方法调用表达式的参数(如果有)是调用方法的第二个和后续形式参数.否则,方法调用表达式的参数是调用方法的形式参数.
注意最后两个子弹,基本上.
例如,如果lambda有三个或更多参数怎么办?这合法吗?第一个参数是否成为方法目标,剩下的参数是否成为参数?
对 :)
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |