Condividi tramite


Proxy Classe

Definizione

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

[Android.Runtime.Register("java/lang/reflect/Proxy", DoNotGenerateAcw=true)]
public class Proxy : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable
[<Android.Runtime.Register("java/lang/reflect/Proxy", DoNotGenerateAcw=true)>]
type Proxy = class
    inherit Object
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Ereditarietà
Proxy
Attributi
Implementazioni

Commenti

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

Per creare un proxy per alcune interfacce Foo:

InvocationHandler handler = new MyInvocationHandler(...);
                Class&lt;?&gt; proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), Foo.class);
                Foo f = (Foo) proxyClass.getConstructor(InvocationHandler.class).
                                newInstance(handler);

o più semplicemente:

Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                                     new Class&lt;?&gt;[] { Foo.class },
                                                     handler);

Una classe proxy dinamica (denominata semplicemente classe proxy riportata di seguito) è una classe che implementa un elenco di interfacce specificate in fase di esecuzione quando viene creata la classe, con il comportamento descritto di seguito.

Un'interfaccia proxy è un'interfaccia di questo tipo implementata da una classe proxy.

Un'istanza proxy è un'istanza di una classe proxy.

Ogni istanza del proxy ha un oggetto gestore chiamate associato, che implementa l'interfaccia InvocationHandler. Una chiamata al metodo in un'istanza del proxy tramite una delle relative interfacce proxy verrà inviata al InvocationHandler#invoke invoke metodo del gestore chiamate dell'istanza, passando l'istanza del proxy, un java.lang.reflect.Method oggetto che identifica il metodo richiamato e una matrice di tipo Object contenente gli argomenti. Il gestore chiamate elabora la chiamata del metodo codificato in base alle esigenze e il risultato restituito verrà restituito come risultato della chiamata al metodo nell'istanza del proxy.

Una classe proxy ha le proprietà seguenti:

<le classi proxy ul><li>sono <em>public, final e non abstract</em> se tutte le interfacce proxy sono pubbliche.</li>

<le classi proxy li>sono <em>non-public, final e non abstract</em> se una delle interfacce proxy è non pubblica.</li>

<li>Il nome non qualificato di una classe proxy non è specificato. Lo spazio dei nomi di classe che iniziano con la stringa "$Proxy" deve essere, tuttavia, riservato per le classi proxy.

<li>Una classe proxy estende java.lang.reflect.Proxy.

<li>Una classe proxy implementa esattamente le interfacce specificate al momento della creazione, nello stesso ordine.

<li>Se una classe proxy implementa un'interfaccia non pubblica, verrà definita nello stesso pacchetto di tale interfaccia. In caso contrario, anche il pacchetto di una classe proxy non è specificato. Si noti che il sealed del pacchetto non impedisce che una classe proxy venga definita correttamente in un determinato pacchetto in fase di esecuzione e nessuna delle classi già definite dallo stesso caricatore di classi e dallo stesso pacchetto con firmatari specifici.

<li>Poiché una classe proxy implementa tutte le interfacce specificate durante la creazione, richiamando getInterfaces sul relativo Class oggetto verrà restituita una matrice contenente lo stesso elenco di interfacce (nell'ordine specificato al momento della creazione), la chiamata getMethods al relativo Class oggetto restituirà una matrice di Method oggetti che includono tutti i metodi in tali interfacce e richiamando getMethod i metodi nelle interfacce proxy come previsto.

<li>Il Proxy#isProxyClass Proxy.isProxyClass metodo restituirà true se viene passata una classe proxy, ovvero una classe restituita da Proxy.getProxyClass o la classe di un oggetto restituito da Proxy.newProxyInstancee false in caso contrario.

<li>L java.security.ProtectionDomain di una classe proxy è uguale a quello delle classi di sistema caricate dal caricatore della classe bootstrap, ad esempio java.lang.Object, perché il codice per una classe proxy viene generato da codice di sistema attendibile. A questo dominio di protezione verrà in genere concesso java.security.AllPermission.

<li>Ogni classe proxy ha un costruttore pubblico che accetta un argomento, un'implementazione dell'interfaccia InvocationHandler, per impostare il gestore chiamate per un'istanza del proxy. Invece di dover usare l'API reflection per accedere al costruttore pubblico, è possibile creare anche un'istanza del proxy chiamando il Proxy#newProxyInstance Proxy.newProxyInstance metodo , che combina le azioni di chiamata Proxy#getProxyClass Proxy.getProxyClass con il richiamo del costruttore con un gestore chiamate. </ul>

Un'istanza del proxy ha le proprietà seguenti:

<ul><li>Dato un'istanza proxy proxy e una delle interfacce implementate dalla relativa classe Fooproxy , l'espressione seguente restituirà true:

{@code proxy instanceof Foo}

e l'operazione di cast seguente avrà esito positivo (anziché generare un oggetto ClassCastException):

{@code (Foo) proxy}

<li>Ogni istanza del proxy ha un gestore chiamate associato, quello passato al relativo costruttore. Il metodo statico Proxy#getInvocationHandler Proxy.getInvocationHandler restituirà il gestore chiamate associato all'istanza del proxy passato come argomento.

<li>Una chiamata al metodo di interfaccia in un'istanza del proxy verrà codificata e inviata al metodo del InvocationHandler#invoke invoke gestore chiamate, come descritto nella documentazione relativa a tale metodo.

<li>Una chiamata dei hashCodemetodi , equalso toString dichiarati in in java.lang.Object un'istanza proxy verrà codificata e inviata al metodo del invoke gestore chiamate nello stesso modo in cui le chiamate al metodo del metodo di interfaccia vengono codificate e inviate, come descritto in precedenza. La classe dichiarante dell'oggetto Method passato a invoke sarà java.lang.Object. Altri metodi pubblici di un'istanza proxy ereditata da java.lang.Object non vengono sottoposti a override da una classe proxy, pertanto le chiamate di tali metodi si comportano come per le istanze di java.lang.Object. </ul>

<Metodi h3>duplicati in più interfacce< proxy/h3>

Quando due o più interfacce di una classe proxy contengono un metodo con lo stesso nome e la stessa firma dei parametri, l'ordine delle interfacce della classe proxy diventa significativo. Quando tale metodo duplicato viene richiamato in un'istanza del proxy, l'oggetto Method passato al gestore chiamate non sarà necessariamente quello la cui classe dichiarativa è assegnabile dal tipo di riferimento dell'interfaccia richiamata dal metodo del proxy. Questa limitazione esiste perché l'implementazione del metodo corrispondente nella classe proxy generata non è in grado di determinare l'interfaccia richiamata tramite . Pertanto, quando viene richiamato un metodo duplicato in un'istanza del proxy, l'oggetto Method per il metodo nell'interfaccia principale che contiene il metodo (direttamente o ereditato tramite una superinterfaccia) nell'elenco di interfacce della classe proxy viene passato al metodo del invoke gestore chiamate, indipendentemente dal tipo di riferimento attraverso il quale si è verificata la chiamata al metodo della classe proxy.

Se un'interfaccia proxy contiene un metodo con lo stesso nome e la stessa firma di parametro dei hashCodemetodi , equalso toString di java.lang.Object, quando tale metodo viene richiamato in un'istanza del proxy, l'oggetto Method passato al gestore chiamate avrà java.lang.Object come classe dichiarante. In altre parole, i metodi pubblici e non finali di java.lang.Object precedono logicamente tutte le interfacce proxy per la determinazione dell'oggetto Method da passare al gestore chiamate.

Si noti anche che quando un metodo duplicato viene inviato a un gestore chiamate, il invoke metodo può generare solo tipi di eccezione controllati assegnabili a uno dei tipi di eccezione nella throws clausola del metodo in tutte le interfacce proxy che è possibile richiamare tramite. Se il invoke metodo genera un'eccezione controllata che non è assegnabile a nessuno dei tipi di eccezione dichiarati dal metodo in una delle interfacce proxy che può essere richiamata tramite, verrà generata un'eccezione deselezionata UndeclaredThrowableException dalla chiamata sull'istanza del proxy. Questa restrizione significa che non tutti i tipi di eccezione restituiti richiamando getExceptionTypes l'oggetto Method passato al invoke metodo possono necessariamente essere generati correttamente dal invoke metodo .

Aggiunta nella versione 1.3.

Documentazione java per java.lang.reflect.Proxy.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Costruttori

Proxy(IInvocationHandler)

Costruisce una nuova Proxy istanza da una sottoclasse (in genere una classe proxy dinamica) con il valore specificato per il gestore chiamate.

Proxy(IntPtr, JniHandleOwnership)

Costruttore utilizzato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
H

gestore chiamate per questa istanza del proxy.

Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
JniPeerMembers

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

PeerReference

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

Metodi

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Dispose()

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
Dispose(Boolean)

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
GetInvocationHandler(Object)

Restituisce il gestore chiamate per l'istanza del proxy specificata.

GetProxyClass(ClassLoader, Class[])

Restituisce l'oggetto java.lang.Class per una classe proxy in base a un caricatore di classi e a una matrice di interfacce.

IsProxyClass(Class)

Restituisce true se e solo se la classe specificata è stata generata dinamicamente come classe proxy utilizzando il getProxyClass metodo o il newProxyInstance metodo .

JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
NewProxyInstance(ClassLoader, Class[], IInvocationHandler)

Restituisce un'istanza di una classe proxy per le interfacce specificate che inviano chiamate al metodo al gestore chiamate specificato.

Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio di questo oggetto.

(Ereditato da Object)
SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
ToArray<T>()

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una>notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
IJavaPeerable.Finalized()

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo verificato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

GetJniTypeName(IJavaPeerable)

Proxy fornisce metodi statici per la creazione di classi proxy dinamiche e istanze ed è anche la superclasse di tutte le classi proxy dinamiche create da tali metodi.

Si applica a