메서드 참조와 람다 표현식: System.out::println의 동등성 탐색
System.out과 같은 메서드 참조를 활용하는 경우 ::println, 함수는 먼저 System.out을 평가하고 결과 값을 람다 식으로 캡처합니다. 예를 들어 이 메서드 참조에 해당하는 람다는 다음과 같습니다.
<code class="java">Consumer<Integer> consumer = System.out::println;</code>
이 람다 식은 아래 코드와 유사하게 동작합니다.
<code class="java">Consumer<Integer> consumer = new Consumer<Integer>() { @Override public void accept(Integer i) { System.out.println(i); } };</code>
그러나 메서드 참조 System.out은 다음과 같습니다. :println은 컴파일 타임에 항상 System.out을 평가하므로 람다 식에 비해 이점을 제공합니다. 람다 식의 경우 메서드가 호출될 때마다 System.out이 평가됩니다.
메서드 참조와 완전히 동일한지 확인하려면 다음 코드를 사용해야 합니다.
<code class="java">PrintStream printStream = Objects.requireNonNull(System.out); Consumer<Integer> consumer = o -> printStream.println(o);</code>
여기서 printStream은 System.out 값을 캡처하는 변수로, System.out에 대한 이후 변경 사항이 이 소비자에게 영향을 미치지 않도록 보장합니다.
위 내용은 메소드 참조가 람다 표현식과 동일하지 않은 경우는 언제입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!