MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.
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.