Joe*_*oey 3 java java-8 java-stream
我是java的新手,所以我的问题是为什么这个工作:
这个方法在我Tree班上:
public Stream<Tree> flattened() {
return Stream.concat(
Stream.of(this),
children.stream().flatMap(Tree::flattened));
}
Run Code Online (Sandbox Code Playgroud)
flatMap想要一个带有t作为param的函数,而flattened方法根本没有输入参数
这里发生了什么事?
函数调用中确实存在隐藏参数.因为flattened是非静态方法,所以函数中有一个隐含参数,称为this.
基本上,您正在调用flattened流中的每个对象,并且所述元素是您的参数.
编辑(澄清):Tree::flattened可以表示两件事之一.这可能意味着:
tree -> Tree.flattened(tree) //flattened is a static method, which yours is not
Run Code Online (Sandbox Code Playgroud)
或者它也可能意味着:
tree -> tree.flattened() //flattened is an instance method, as in your case
Run Code Online (Sandbox Code Playgroud)
除此之外,它还可能意味着:
tree -> this.flattened(tree) //also doesn't apply to your case
Run Code Online (Sandbox Code Playgroud)
来自JLS:
如果编译时声明是实例方法,则目标引用是调用方法的第一个形式参数.否则,没有目标参考
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |