다음을 통해 공유


MethodHandles.CatchException(MethodHandle, Class, MethodHandle) 메서드

정의

예외 처리기 내에서 실행하여 대상 메서드 핸들을 조정하는 메서드 핸들을 만듭니다.

[Android.Runtime.Register("catchException", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)]
public static Java.Lang.Invoke.MethodHandle? CatchException(Java.Lang.Invoke.MethodHandle? target, Java.Lang.Class? exType, Java.Lang.Invoke.MethodHandle? handler);
[<Android.Runtime.Register("catchException", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=26)>]
static member CatchException : Java.Lang.Invoke.MethodHandle * Java.Lang.Class * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

매개 변수

target
MethodHandle

호출할 메서드 핸들

exType
Class

처리기가 catch할 예외의 형식

handler
MethodHandle

일치하는 예외가 throw되면 호출할 메서드 핸들

반환

지정된 try/catch 논리를 통합하는 메서드 핸들

특성

설명

예외 처리기 내에서 실행하여 대상 메서드 핸들을 조정하는 메서드 핸들을 만듭니다. 대상이 정상적으로 반환되면 어댑터는 해당 값을 반환합니다. 지정된 형식과 일치하는 예외가 throw되면 대체 핸들이 대신 예외와 원래 인수에 대해 호출됩니다.

처리기가 후행 인수를 생략할 수 있다는 점을 제외하고 대상 및 처리기는 동일한 해당 인수 및 반환 형식을 가져야 합니다(조건자와 #guardWithTest guardWithTest유사하게). 또한 처리기에는 추가 선행 매개 변수 또는 exType 슈퍼 형식이 있어야 합니다.

결과 어댑터의 의사 코드는 다음과 같습니다. 코드 T 에서 결과 어댑터의 target 반환 형식 및 handler그에 해당하는 반환 형식을 나타내며, 결과 어댑터A/a에 의해 handler사용된 결과 핸들에 대한 인수의 형식 및 값, 그리고 결과 핸들에 대한 인수의 형식 및/Bb 값을 무시합니다.handler <blockquote>

{@code
            T target(A..., B...);
            T handler(ExType, A...);
            T adapter(A... a, B... b) {
              try {
                return target(a..., b...);
              } catch (ExType ex) {
                return handler(ex, a...);
              }
            }
            }

</blockquote> 대상의 실행에 의해 저장된 인수(a... 의사 코드)를 수정할 수 없으므로 처리기가 호출된 경우 호출자에서 처리기로 변경되지 않고 전달됩니다.

처리기가 항상 throw되더라도 대상 및 처리기는 동일한 형식을 반환해야 합니다. 예를 들어 처리기가 절을 시뮬레이션하기 finally 때문에 발생할 수 있습니다. 이러한 throw 처리기를 만들려면 올바른 반환 형식의 메서드 핸들을 만들기 위해 처리기 생성 논리를 작성 #throwException throwException합니다.

에 대한 java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle)Java 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

적용 대상