一尘不染

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

java

我偶然发现了以下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什么?


阅读 1180

收藏
2020-03-12

共1个答案

一尘不染

方法参考System.out::printlnSystem.out首先求值,然后创建一个等效的lambda表达式来捕获求值。通常,你将使用
o->System.out.println(o)与方法引用相同的方法来实现,但是此lambda表达式将在System.out每次调用该方法时求值。

因此,确切的等效条件是:

 PrintStream p = Objects.requireNonNull(System.out);
 numbers.forEach(o -> p.println(o));

如果有人System.setOut(…);在两者之间进行调用,则会有所不同。

2020-03-12