MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rende un handle di metodo che adatta un handle di metodo di destinazione, eseguendolo all'interno di un gestore eccezioni.
[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
Parametri
- target
- MethodHandle
handle del metodo da chiamare
- exType
- Class
tipo di eccezione che il gestore intercetta
- handler
- MethodHandle
handle del metodo da chiamare se viene generata un'eccezione corrispondente
Restituisce
handle del metodo che incorpora la logica try/catch specificata
- Attributi
Commenti
Rende un handle di metodo che adatta un handle di metodo di destinazione, eseguendolo all'interno di un gestore eccezioni. Se la destinazione restituisce normalmente, l'adattatore restituisce tale valore. Se viene generata un'eccezione corrispondente al tipo specificato, l'handle di fallback viene chiamato invece sull'eccezione, più gli argomenti originali.
Il gestore e la destinazione devono avere lo stesso argomento e gli stessi tipi restituiti, ad eccezione del fatto che il gestore può omettere argomenti finali (in modo analogo al predicato in #guardWithTest guardWithTest
). Inoltre, il gestore deve avere un parametro iniziale aggiuntivo di exType
o un supertipo.
Ecco lo pseudocodice per l'adattatore risultante. Nel codice rappresenta T
il tipo restituito di target
e handler
e corrispondentemente quello dell'adattatore risultante; A
/a
, i tipi e i valori degli argomenti nell'handle risultante utilizzato da handler
; e/B
b
, quelli degli argomenti all'handle risultante scartato da .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> Si noti che gli argomenti salvati (a...
nello pseudocodice) non possono essere modificati dall'esecuzione della destinazione e quindi vengono passati invariati dal chiamante al gestore, se viene richiamato il gestore.
Il gestore e la destinazione devono restituire lo stesso tipo, anche se il gestore genera sempre . Ciò può verificarsi, ad esempio, perché il gestore simula una finally
clausola. Per creare un gestore di questo tipo, comporre la logica di creazione del gestore con #throwException throwException
per creare un handle di metodo del tipo restituito corretto.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.