我偶然发现了以下Java代码,该代码使用了方法参考 System.out.println
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什么?
System.out::println
方法参考System.out::println将System.out首先求值,然后创建一个等效的lambda表达式来捕获求值。通常,你将使用 o->System.out.println(o)与方法引用相同的方法来实现,但是此lambda表达式将在System.out每次调用该方法时求值。
System.out
lambda
o->System.out.println(o)
因此,确切的等效条件是:
PrintStream p = Objects.requireNonNull(System.out); numbers.forEach(o -> p.println(o));
如果有人System.setOut(…);在两者之间进行调用,则会有所不同。
System.setOut(…)