System.out :: println的等效lambda表达式是什么我偶然发现了以下使用方法参考的Java代码 System.out.printlnclass SomeClass{
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);
numbers.forEach(System.out::println);
}
}}什么是等效的lambda表达式System.out::println?
3 回答

潇湘沐
TA贡献1816条经验 获得超6个赞
首先System.out::println
评估方法引用System.out
,然后创建一个捕获评估值的lambda表达式的等价物。通常,您将使用o->System.out.println(o)
与方法引用相同的方法,但System.out
每次调用方法时,此lambda表达式都将进行评估。
所以完全相同的是:
PrintStream p = Objects.requireNonNull(System.out); numbers.forEach(o -> p.println(o));
如果有人System.setOut(…);
在中间调用,那将会产生影响。

千巷猫影
TA贡献1829条经验 获得超7个赞
它的 :
numbers.forEach(i -> {System.out.println(i);});
甚至更简单:
numbers.forEach(i -> System.out.println(i));

MMTTMM
TA贡献1869条经验 获得超4个赞
我确实理解了方法引用的调用目标when its declaration is first encountered
,这对我来说是合乎逻辑的。但是有一个jls部分明确地说明了这一点(我真的试图找到它......)。如果调用目标是一个方法,那么可以捕获该方法,this
例如,不是该方法返回的实际对象...据我所知。
添加回答
举报
0/150
提交
取消