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