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

тип исключения, перехватываемого обработчиком;

handler
MethodHandle

дескриптор метода для вызова при возникновении соответствующего исключения

Возвращаемое значение

дескриптор метода, включающий указанную логику try/catch

Атрибуты

Комментарии

Создает дескриптор метода, который адаптирует дескриптор целевого метода, запуская его внутри обработчика исключений. Если целевой объект возвращает обычно, адаптер возвращает это значение. При возникновении исключения, соответствующего указанному типу, вместо исключения вызывается резервный дескриптор, а также исходные аргументы.

Целевой объект и обработчик должны иметь одинаковые соответствующие типы аргументов и возвращаемых значений, за исключением того, что обработчик может пропускать конечные аргументы (аналогично предикату в #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... в псевдокоде) не могут быть изменены при выполнении целевого объекта и поэтому передаются обработчику без изменений из вызываемого обработчика.

Целевой объект и обработчик должны возвращать один и тот же тип, даже если обработчик всегда выдает исключение. (Это может произойти, например, потому, что обработчик имитирует finally предложение.) Чтобы создать такой обработчик, создайте логику создания обработчика с #throwException throwExceptionпомощью , чтобы создать дескриптор метода с правильным типом возвращаемого значения.

Документация по Java для java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle).

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

Применяется к