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
; и/B
b
, аргументы результирующего дескриптора, отбрасываемые .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
помощью , чтобы создать дескриптор метода с правильным типом возвращаемого значения.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.