Condividi tramite


MethodHandles.CatchException(MethodHandle, Class, MethodHandle) Metodo

Definizione

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 handlere corrispondentemente quello dell'adattatore risultante; A/a, i tipi e i valori degli argomenti nell'handle risultante utilizzato da handler; e/Bb , 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 throwExceptionper creare un handle di metodo del tipo restituito corretto.

Documentazione java per java.lang.invoke.MethodHandles.catchException(java.lang.invoke.MethodHandle, java.lang.Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle).

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.

Si applica a