> Java > java지도 시간 > 반환 값이 포함된 Java 메서드 참조가 `소비자` 인터페이스에서 작동하는 이유는 무엇입니까?

반환 값이 포함된 Java 메서드 참조가 `소비자` 인터페이스에서 작동하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-22 18:04:12
원래의
570명이 탐색했습니다.

Why Does a Java Method Reference with a Return Value Work with the `Consumer` Interface?

반환 유형이 포함된 Java 메서드 참조가 소비자 인터페이스와 일치하는 이유

문제

다음 코드 조각을 고려하세요.

Consumer<String>         lambda1 = s -> {};
Function<String, String> lambda2 = s -> s;

Consumer<String>         lambda3 = LambdaTest::consume; // but s -> s doesn't work!
Function<String, String> lambda4 = LambdaTest::consume;
로그인 후 복사

Consumer 인터페이스에 따라 void accept(T t)로 정의됩니다. 따라서 소비 메소드가 문자열을 반환할 때 Lambda3을 할당하면 당황스러울 수 있습니다. 놀랍게도 Lambda4도 할당되어 있습니다.

설명

이 시나리오는 Java의 메소드 참조의 유연한 설계에 기인합니다. 이는 메소드를 직접 호출하는 것과 동일한 방식으로 기능적 인터페이스에 대한 메소드의 적응을 허용합니다. 즉, 값 반환 메서드를 호출하고 반환된 값을 무시할 수 있습니다.

Lambda 표현식 구별

Lambda 표현식은 두 가지 형식으로 제공됩니다.

  1. ( 인수) -> 표현식: 표현식이 값으로 평가되는 경우 값이 호환됩니다.
  2. (args) -> { 문* }: 코드 경로가 값을 반환하려고 시도하지 않으면 호환이 무효화됩니다.

표현식 s -> s는 명령문이 아니기 때문에 s는 void 호환이 아닙니다. 그러나 s -> s.toString()은 메소드 호출이 명령문이기 때문에 가능합니다.

호환 형식

문으로 사용할 수 있는 표현식(Java 언어 사양 §14.8에 따름)은 다음과 같습니다.

  • 메서드 호출
  • 증가/감소 연산자
  • 할당
  • 클래스 인스턴스 생성 표현식

제한

(arg) -> methodReturningVoid(arg)는 값과 호환되지 않는 유일한 표현식 형식입니다.

위 내용은 반환 값이 포함된 Java 메서드 참조가 `소비자` 인터페이스에서 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿