효과적인 자바! Lambda에 대한 메서드 참조 선호
2438 단어 lambdaarchitecturejavaeffective
메소드 참조는 단순히 매개변수를 한 곳에서 다른 곳으로 전달하는 상용구를 건너뛸 수 있도록 하는 메소드에 대한 참조입니다. 매우 간단한 예를 살펴보겠습니다.
IntStream.of(1,2,3).reduce((a, b) -> Integer.sum(a, b));
이것은 단순히
IntStream
를 생성하고 모든 값을 합한 다음 합계를 반환하는 매우 간단한 코드입니다. reduce
호출의 일부로 람다를 사용합니다. 이것은 매우 장황하지 않지만 (a, b) ->
우리에게 가치를 제공하지 않습니다. 이 동일한 코드를 보고 있지만 메서드 참조가 있습니다.IntStream.of(1,2,3).reduce(Integer::sum);
이것은 실제로 더 간단하며 수행 방법이 아니라 수행 중인 작업에 중점을 두는 것이 좋습니다. 발생하는 합계를 직접 호출하여 합계가 어떻게 달성되는지 보여주지 않습니다.
거의 모든 경우에 동등한 람다 대신 메서드 참조를 사용해야 합니다. 그 이유는 대부분 가독성을 높이기 때문입니다. 모든 비즈니스 논리를 포함하는 메서드를 작성하고 설명적인 이름을 지정하고 메서드 참조를 통해 호출할 수 있다는 점에서 이 기능을 유용하게 사용할 수도 있습니다. 코드에서 그렇지 않은 경우 대신 람다를 사용해야 합니다. 호출해야 하는 포함 클래스의 이름이 정말 길거나 매개변수 이름이 좋은 문서 역할을 할 수 있기 때문일 수 있습니다.
마지막으로 메서드 참조를 호출하는 방법은 코드의 종류에 따라 약간 변경됩니다.
참조 유형
예시
람다 등가
공전
정수::parseInt
str -> Integer.parseInt(str)
경계
Instant.now()::isAfter
Instant then = Instant.now(); t -> then.isAFter(t);
매여 있지 않은
문자열::toLowerCase
str -> str.toLowerCase()
클래스 생성자
트리맵::새로 만들기
() -> 새로운 트리맵
배열 생성자
정수[]::새로운
len -> 새로운 정수[len]
메서드 참조가 더 짧고 명확할 때(종종 그런 경우가 있음) 이를 사용하는 것은 기본적으로 이 경험 법칙으로 귀결됩니다.
Reference
이 문제에 관하여(효과적인 자바! Lambda에 대한 메서드 참조 선호), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kylec32/effective-java-prefer-method-references-to-lambdas-j5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)