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.
Faz um identificador de método que adapta um identificador de método de destino executando-o dentro de um manipulador de exceção.
[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 capturará
- handler
- MethodHandle
identificador de método para chamar se uma exceção correspondente for gerada
Retornos
identificador de método que incorpora a lógica try/catch especificada
- Atributos
Comentários
Faz um identificador de método que adapta um identificador de método de destino executando-o dentro de um manipulador de exceção. Se o destino retornar normalmente, o adaptador retornará esse valor. Se uma exceção que corresponde ao tipo especificado for gerada, o identificador de fallback será chamado na exceção, além dos 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 (da mesma forma que o predicado).#guardWithTest guardWithTest Além disso, o manipulador deve ter um parâmetro adicional à esquerda ou exType 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/Bb , aqueles 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 invocado.
O destino e o manipulador devem retornar o mesmo tipo, mesmo que o manipulador sempre seja lançado. (Isso pode acontecer, por exemplo, porque o manipulador está simulando uma finally cláusula). Para criar esse manipulador de lançamento, redigir 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 Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.