私は次のようにつまずきました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);
}
}
}
System.out::println
の同等のラムダ式は何ですか?
メソッド参照_System.out::println
_は、最初に_System.out
_を評価してから、ラムダ式に相当するキャプチャ評価値を作成します。通常は、o->System.out.println(o)
は、メソッド参照と同じことを実現しますが、このラムダ式は、メソッドが呼び出されるたびに_System.out
_を評価します。
したがってexactは次のようになります。
_ PrintStream p = Objects.requireNonNull(System.out);
numbers.forEach(o -> p.println(o));
_
これは、誰かがSystem.setOut(…);
を途中で呼び出した場合に違いをもたらします。
それは:
numbers.forEach(i -> {System.out.println(i);});
またはさらに簡単:
numbers.forEach(i -> System.out.println(i));