MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Cria um identificador de método que adapta um identificador de método de destino, executando-o dentro de um manipulador de exceções.
[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
Parâmetros
- target
- MethodHandle
identificador de método para chamar
- exType
- Class
o tipo de exceção que o manipulador detectará
- handler
- MethodHandle
identificador de método para chamar se uma exceção correspondente for lançada
Retornos
alça de método que incorpora a lógica try/catch especificada
- Atributos
Comentários
Cria um identificador de método que adapta um identificador de método de destino, executando-o dentro de um manipulador de exceções. Se o destino retornar normalmente, o adaptador retornará esse valor. Se uma exceção correspondente ao tipo especificado for lançada, o identificador de fallback será chamado na exceção, mais os argumentos originais.
O destino e o manipulador devem ter os mesmos tipos de argumento e retorno correspondentes, exceto que o manipulador pode omitir argumentos à direita (de forma semelhante ao predicado em #guardWithTest guardWithTest
). Além disso, o manipulador deve ter um parâmetro à esquerda extra de exType
ou um supertipo.
Aqui está o pseudocódigo para o adaptador resultante. No código, T
representa o tipo de retorno do target
e handler
, e correspondentemente o do adaptador resultante; A
a
/, os tipos e valores de argumentos para o identificador resultante consumido por handler
; e B
/b
, os de argumentos para o identificador resultante descartado por .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> Observe que os argumentos salvos (a...
no pseudocódigo) não podem ser modificados pela execução do destino e, portanto, são passados inalterados do chamador para o manipulador, se o manipulador for chamado.
O destino e o manipulador devem retornar o mesmo tipo, mesmo que o manipulador sempre lance. (Isso pode acontecer, por exemplo, porque o manipulador está simulando uma finally
cláusula). Para criar esse manipulador de lançamento, componha a lógica de criação do manipulador com #throwException throwException
, a fim de criar um identificador de método do tipo de retorno correto.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.