Compartilhar via


MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Método

Definição

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; Aa/, 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.

Documentação Java para java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle).

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.

Aplica-se a