System.out :: println的等效lambda表达式是什么

System.out :: println的等效lambda表达式是什么

我偶然发现了以下使用方法参考的Java代码 System.out.println

class 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


子衿沉夜
浏览 1673回答 3
3回答

潇湘沐

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

千巷猫影

它的 :numbers.forEach(i&nbsp;->&nbsp;{System.out.println(i);});甚至更简单:numbers.forEach(i&nbsp;->&nbsp;System.out.println(i));

MMTTMM

我确实理解了方法引用的调用目标when its declaration is first encountered,这对我来说是合乎逻辑的。但是有一个jls部分明确地说明了这一点(我真的试图找到它......)。如果调用目标是一个方法,那么可以捕获该方法,this例如,不是该方法返回的实际对象...据我所知。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java