>  기사  >  Java  >  반환 유형이 있는 메소드를 Java의 소비자 인터페이스와 함께 어떻게 사용할 수 있습니까?

반환 유형이 있는 메소드를 Java의 소비자 인터페이스와 함께 어떻게 사용할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-23 04:12:13575검색

How Can Methods with Return Types Be Used with Java's Consumer Interface?

반환 유형 호환성을 갖춘 Lambda 메서드 참조 이해

Lambda 표현식과 메서드 참조는 Java에서 기능 인터페이스를 정의하는 대체 방법을 제공합니다. 그러나 Consumer의 accept 메소드에 void 반환 유형이 있음에도 불구하고 반환 유형이 있는 메소드 참조가 Consumer 인터페이스와 일치하는 것처럼 보이면 혼란이 발생합니다.

Basis for Design

Brian Goetz가 설명하듯이, 이 동작은 의도적인 것입니다. 이를 통해 개발자는 메서드를 직접 호출하는 것과 동일한 방식으로 기능적 인터페이스에 메서드를 적용할 수 있습니다. 따라서 반환 값을 무시하고 값 반환 메서드를 Consumer 인터페이스와 함께 사용할 수 있습니다.

Lambda 표현식 및 반환 유형

Lambda 표현식은 두 가지 형식을 취할 수 있습니다.

  • (args) -> 표현식: 이 형식은 값으로 평가되므로 void 호환될 수 없습니다. 예를 들어 () -> { 반품 ""; }는 void 호환이 아니지만 () -> {} 또는 () -> { 반품; } 입니다.
  • (args) -> { 문* }: 이 양식에는 하나 이상의 문이 포함되어 있습니다. 코드 경로가 값을 반환하려고 시도하지 않으면 호환되지 않습니다. 정상적인 완료를 방해하는 예외는 이러한 람다를 void 호환으로 렌더링합니다.

메서드 참조 및 명령문

메서드 참조는 기능적 인터페이스를 정의하는 또 다른 방법입니다. 그러나 모든 메서드를 Consumer의 메서드 참조로 사용할 수 있는 것은 아닙니다. 특히:

  • void가 아닌 반환 유형을 가진 메서드는 Consumer에서 메서드 참조로 사용할 수 없습니다.
  • 문이기도 한 표현식은 void와 호환될 수 있습니다. 예를 들어 s -> s.toString()은 메소드 호출이 명령문으로 간주되므로 무효 호환됩니다.

예외

값과 호환되지 않는 유일한 표현식 형식은 (arg) -> methodReturningVoid(arg). 값을 반환하지 않기 때문이다.

결론

Consumer와 메서드 참조의 호환성은 반환 유형과 표현식을 문으로 사용할 수 있는지 여부에 따라 달라집니다. 이 개념을 이해하면 람다 및 메소드 참조가 Java의 기능적 인터페이스와 상호 작용하는 방식을 명확히 하는 데 도움이 됩니다.

위 내용은 반환 유형이 있는 메소드를 Java의 소비자 인터페이스와 함께 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.