더북(TheBook)

첫 번째 형태에서는 첫 번째 매개변수가 메서드의 수신자가 되고, 나머지 매개변수는 메서드에 전달한다. 예를 들어 String::compareToIgnoreCase(x, y) -> x.compareToIgnoreCase(y)와 같다.

두 번째 형태에서는 모든 매개변수가 정적 메서드로 전달된다. 메서드 표현식 Objects::isNullx -> Objects.isNull(x)와 같다.

세 번째 형태에서는 주어진 객체로 메서드를 호출하며, 매개변수는 인스턴스 메서드로 전달된다. 따라서 System.out::println은 x -> System.out.println(x)와 같다.

Note ≣

같은 이름으로 오버로드된 메서드가 여러 개일 때 컴파일러는 어느 것을 의도했는지 문맥으로 알아내려고 한다. 예를 들어 println 메서드는 여러 버전이 있다. printlnArrayList<String>의 forEach 메서드에 전달하면 println(String) 메서드가 선택된다.


메서드 참조에서 this 매개변수를 캡처할 수 있다. 예를 들어 this::equalsx -> this.equals(x)와 같다.

Note ≣

내부 클래스에서 EnclosingClass.this::method로 자신을 감싸는 클래스의 this 참조를 캡처할 수 있다. super도 같은 방식으로 캡처할 수 있다(4장 상속과 리플렉션 참고).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.