>Java >java지도 시간 >Java 8 Lambda 함수에서 확인된 예외를 어떻게 처리할 수 있습니까?

Java 8 Lambda 함수에서 확인된 예외를 어떻게 처리할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-20 16:54:151112검색

How Can I Handle Checked Exceptions in Java 8 Lambda Functions?

Java 8의 Lambda 함수 및 예외 처리

Java 8에서 람다 함수는 함수 유형 정의를 위한 간결한 구문을 제공합니다. 그러나 잠재적으로 확인된 예외를 발생시킬 수 있는 람다 함수를 처리할 때 일반적인 문제가 발생합니다.

IOException을 발생시키는 다음 람다 함수를 고려하십시오.

Integer myMethod(String s) throws IOException

이에 대한 참조를 생성하려고 시도합니다. 표준 Function 인터페이스를 사용하는 메서드를 사용하면 컴파일 오류가 발생합니다. 이는 Function 인터페이스가 확인된 예외를 선언하지 않아 myMethod와 같은 메소드와 호환되지 않기 때문입니다.

이 문제를 해결하기 위해 다음과 같은 몇 가지 옵션이 있습니다.

  1. 정의 사용자 정의 기능 인터페이스:

코드를 제어할 수 있는 경우 사용자 정의를 정의할 수 있습니다. 검사된 예외를 명시적으로 선언하는 기능적 인터페이스입니다. 예:

@FunctionalInterface
public interface CheckedFunction<T, R> {
   R apply(T t) throws IOException;
}

그런 다음 이 사용자 정의 인터페이스를 사용하여 myMethod를 참조할 수 있습니다:

void foo (CheckedFunction f) { ... }
  1. 메서드 래핑:

또는 myMethod를 체크된 메서드를 발생시키지 않는 새로운 메서드로 래핑할 수도 있습니다. 예외. 예를 들어:

public Integer myWrappedMethod(String s) {
    try {
        return myMethod(s);
    }
    catch(IOException e) {
        throw new UncheckedIOException(e);
    }
}

이제 함수 인터페이스를 사용하여 이 래핑된 메서드를 참조할 수 있습니다.

Function<String, Integer> f = (String t) -> myWrappedMethod(t);
  1. 예외를 처리하는 Lambda 본문:

마지막 옵션으로 체크된 항목을 명시적으로 처리하는 람다 함수 본문을 정의할 수 있습니다. 예외. 예:

Function<String, Integer> f =
    (String t) -> {
        try {
           return myMethod(t);
        }
        catch(IOException e) {
            throw new UncheckedIOException(e);
        }
    };

위 내용은 Java 8 Lambda 함수에서 확인된 예외를 어떻게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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