Compartir a través de


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

Definición

Convierte un identificador de método que adapta un identificador de método de destino, ejecutándolo dentro de un controlador de excepciones.

[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 llamar a

exType
Class

el tipo de excepción que detectará el controlador.

handler
MethodHandle

identificador de método para llamar a si se produce una excepción coincidente

Devoluciones

identificador de método que incorpora la lógica try/catch especificada

Atributos

Comentarios

Convierte un identificador de método que adapta un identificador de método de destino, ejecutándolo dentro de un controlador de excepciones. Si el destino devuelve normalmente, el adaptador devuelve ese valor. Si se produce una excepción que coincide con el tipo especificado, se llama al identificador de reserva en su lugar en la excepción, además de los argumentos originales.

El destino y el controlador deben tener los mismos tipos de argumento y valor devuelto correspondientes, excepto que el controlador puede omitir argumentos finales (de forma similar al predicado de #guardWithTest guardWithTest). Además, el controlador debe tener un parámetro inicial adicional de exType o un supertipo.

Este es el pseudocódigo para el adaptador resultante. En el código, T representa el tipo de valor devuelto de target y handler, y correspondientemente el del adaptador resultante; , A/alos tipos y valores de argumentos al controlador resultante consumido por handler; ybB/ , los de argumentos al 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> Tenga en cuenta que los argumentos guardados (a... en el pseudocódigo) no se pueden modificar mediante la ejecución del destino y, por tanto, se pasan sin cambios del autor de la llamada al controlador, si se invoca al controlador.

El destino y el controlador deben devolver el mismo tipo, incluso si el controlador siempre produce. (Esto puede ocurrir, por ejemplo, porque el controlador está simulando una finally cláusula ). Para crear este tipo de controlador de inicio, componga la lógica de creación del controlador con #throwException throwException, para crear un identificador de método del tipo de valor devuelto correcto.

Documentación de Java para java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Se aplica a