Proxy Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.
[Android.Runtime.Register("java/lang/reflect/Proxy", DoNotGenerateAcw=true)]
public class Proxy : Java.Lang.Object, IDisposable, 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
- Héritage
- Attributs
- Implémente
Remarques
Proxy fournit des méthodes statiques pour créer des classes et des instances de proxy dynamiques, et il s’agit également de la superclasse de toutes les classes proxy dynamiques créées par ces méthodes.
Pour créer un proxy pour une interface Foo:
InvocationHandler handler = new MyInvocationHandler(...);
Class<?> proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), Foo.class);
Foo f = (Foo) proxyClass.getConstructor(InvocationHandler.class).
newInstance(handler);
ou plus simplement :
Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
new Class<?>[] { Foo.class },
handler);
Une classe proxy dynamique (simplement appelée classe proxy ci-dessous) est une classe qui implémente une liste d’interfaces spécifiées lors de l’exécution lorsque la classe est créée, avec le comportement décrit ci-dessous.
Une interface proxy est une interface telle qu’implémentée par une classe proxy.
Une instance proxy est une instance d’une classe proxy.
Chaque instance proxy a un objet de gestionnaire d’appel associé, qui implémente l’interface InvocationHandler. Un appel de méthode sur une instance proxy via l’une de ses interfaces proxy sera distribué à la InvocationHandler#invoke invoke méthode du gestionnaire d’appel de l’instance, en passant l’instance proxy, un java.lang.reflect.Method objet identifiant la méthode appelée et un tableau de types Object contenant les arguments. Le gestionnaire d’appel traite l’appel de méthode encodé selon les besoins et le résultat qu’il retourne sera retourné suite à l’appel de méthode sur l’instance proxy.
Une classe proxy a les propriétés suivantes :
<Les classes de proxy ul><li>sont <>publiques, finales et non abstraites</em> si toutes les interfaces proxy sont publiques.</li>
<Les classes de proxy li>sont <em>non publiques, finales et non abstraites</em> si l’une des interfaces proxy n’est pas publique.</li>
<li>Le nom non qualifié d’une classe proxy n’est pas spécifié. Toutefois, l’espace des noms de classes commençant par la chaîne "$Proxy" doit être réservé aux classes proxy.
<li>A classe proxy s’étend java.lang.reflect.Proxy.
<Li>A classe proxy implémente exactement les interfaces spécifiées lors de sa création, dans le même ordre.
<li>Si une classe proxy implémente une interface non publique, elle sera définie dans le même package que cette interface. Sinon, le package d’une classe proxy n’est pas spécifié. Notez que le scellement de package n’empêche pas une classe proxy d’être correctement définie dans un package particulier au moment de l’exécution, et aucune des classes déjà définies par le même chargeur de classes et le même package avec des signataires particuliers.
<li>Étant donné qu’une classe proxy implémente toutes les interfaces spécifiées lors de sa création, l’appel getInterfaces sur son Class objet retourne un tableau contenant la même liste d’interfaces (dans l’ordre spécifié lors de sa création), l’appel getMethods sur son Class objet retourne un tableau d’objets Method qui incluent toutes les méthodes de ces interfaces, et l’appel getMethod trouvera des méthodes dans les interfaces proxy comme prévu.
<li>La Proxy#isProxyClass Proxy.isProxyClass méthode retourne true si elle est passée à une classe proxy : une classe retournée par Proxy.getProxyClass ou la classe d’un objet retourné par Proxy.newProxyInstance-- et false sinon.
<li>La java.security.ProtectionDomain classe proxy est identique à celle des classes système chargées par le chargeur de classe bootstrap, par java.lang.Objectexemple, car le code d’une classe proxy est généré par du code système approuvé. Ce domaine de protection est généralement accordé java.security.AllPermission.
<li>Chaque classe proxy a un constructeur public qui accepte un argument, une implémentation de l’interface InvocationHandler, pour définir le gestionnaire d’appel pour une instance de proxy. Au lieu d’utiliser l’API de réflexion pour accéder au constructeur public, une instance proxy peut également être créée en appelant la Proxy#newProxyInstance Proxy.newProxyInstance méthode, qui combine les actions d’appel Proxy#getProxyClass Proxy.getProxyClass avec l’appel du constructeur avec un gestionnaire d’appel.
</ul>
Une instance proxy a les propriétés suivantes :
<ul><li>Étant donné une instance proxy proxy et l’une des interfaces implémentées par sa classe Fooproxy, l’expression suivante retourne la valeur true :
{@code proxy instanceof Foo}
et l’opération de cast suivante réussit (au lieu de lever un ClassCastException) :
{@code (Foo) proxy}
<li>Chaque instance proxy a un gestionnaire d’appel associé, celui qui a été passé à son constructeur. La méthode statique Proxy#getInvocationHandler Proxy.getInvocationHandler retourne le gestionnaire d’appel associé à l’instance proxy passée en tant qu’argument.
<Li>Une méthode d’appel de méthode d’interface sur une instance proxy est encodée et distribuée à la méthode du InvocationHandler#invoke invoke gestionnaire d’appel, comme décrit dans la documentation de cette méthode.
<Li>Un appel de la hashCodeméthode , equalsou toString des méthodes déclarées sur java.lang.Object une instance proxy sera encodé et distribué à la méthode du invoke gestionnaire d’appel de la même manière que les appels de méthode d’interface sont encodés et distribués, comme décrit ci-dessus. La classe déclarante de l’objet Method passé invoke sera java.lang.Object. D’autres méthodes publiques d’une instance proxy héritée ne java.lang.Object sont pas remplacées par une classe proxy, de sorte que les appels de ces méthodes se comportent comme pour les instances de java.lang.Object.
</ul>
<Méthodes h3>dupliquées dans plusieurs interfaces< proxy/h3>
Lorsque deux interfaces ou plus d’une classe proxy contiennent une méthode portant le même nom et la même signature de paramètre, l’ordre des interfaces de la classe proxy devient significatif. Lorsqu’une telle méthode dupliquée est appelée sur une instance de proxy, l’objet Method transmis au gestionnaire d’appel ne sera pas nécessairement celui dont la classe déclarante est assignable à partir du type de référence de l’interface via laquelle la méthode du proxy a été appelée. Cette limitation existe, car l’implémentation de méthode correspondante dans la classe proxy générée ne peut pas déterminer l’interface à laquelle elle a été appelée. Par conséquent, lorsqu’une méthode dupliquée est appelée sur une instance proxy, l’objet Method de la méthode dans l’interface la plus haute qui contient la méthode (directement ou héritée par le biais d’une superinterface) dans la liste d’interfaces de la classe proxy est transmis à la méthode du invoke gestionnaire d’appel, quel que soit le type de référence à travers lequel l’appel de méthode s’est produit.
Si une interface proxy contient une méthode portant le même nom et la même signature de paramètre que le hashCode, equalsou toString les méthodes de java.lang.Object, lorsqu’une telle méthode est appelée sur une instance proxy, l’objet Method passé au gestionnaire d’appel aura java.lang.Object comme classe déclarante. En d’autres termes, les méthodes publiques et non finales de java.lang.Object précédent logiquement toutes les interfaces proxy pour la détermination de l’objet Method à passer au gestionnaire d’appel.
Notez également que lorsqu’une méthode en double est distribuée à un gestionnaire d’appel, la invoke méthode peut uniquement lever des types d’exceptions vérifiés qui sont assignables à l’un des types d’exceptions dans la throws clause de la méthode dans toutes les interfaces proxy qu’il peut appeler. Si la invoke méthode lève une exception vérifiée qui n’est pas assignable à l’un des types d’exceptions déclarés par la méthode dans l’une des interfaces proxy qu’elle peut appeler, une exception non cochée UndeclaredThrowableException est levée par l’appel sur l’instance proxy. Cette restriction signifie que tous les types d’exceptions retournés par l’appel getExceptionTypes sur l’objet Method transmis à la invoke méthode peuvent nécessairement être levées avec succès par la invoke méthode.
Ajouté dans la version 1.3.
Java documentation pour java.lang.reflect.Proxy.
Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.
Constructeurs
| Nom | Description |
|---|---|
| Proxy(IInvocationHandler) |
Construit une nouvelle |
| Proxy(IntPtr, JniHandleOwnership) |
Constructeur utilisé lors de la création de représentations managées d’objets JNI ; appelée par le runtime. |
Propriétés
| Nom | Description |
|---|---|
| Class |
Retourne la classe runtime de ce |
| H |
gestionnaire d’appel pour cette instance de proxy. |
| Handle |
Handle de l’instance Android sous-jacente. (Hérité de Object) |
| JniIdentityHashCode |
Obtient le code de hachage d’identité affecté à cet homologue Java par le runtime d’interopérabilité. (Hérité de Object) |
| JniManagedPeerState |
|
| JniPeerMembers |
|
| PeerReference |
Obtient la référence d’objet JNI pour cet homologue Java. (Hérité de Object) |
| ThresholdClass |
Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code. |
| ThresholdType |
Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code. |
Méthodes
| Nom | Description |
|---|---|
| Clone() |
Crée et retourne une copie de cet objet. (Hérité de Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
|
| Dispose() |
Libère les ressources détenues par cet homologue Java. (Hérité de Object) |
| Dispose(Boolean) |
Libère les ressources détenues par cet homologue Java. (Hérité de Object) |
| DisposeUnlessReferenced() |
|
| Equals(Object) |
|
| Equals(Object) |
Indique si un autre objet est « égal à » celui-ci. (Hérité de Object) |
| GetHashCode() |
Retourne une valeur de code de hachage pour l'objet. (Hérité de Object) |
| GetInvocationHandler(Object) |
Retourne le gestionnaire d’appel pour l’instance de proxy spécifiée. |
| GetProxyClass(ClassLoader, Class[]) |
Retourne l’objet |
| IsProxyClass(Class) |
Retourne true si et uniquement si la classe spécifiée a été générée dynamiquement comme classe proxy à l’aide de la |
| JavaFinalize() |
Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet. (Hérité de Object) |
| NewProxyInstance(ClassLoader, Class[], IInvocationHandler) |
Retourne une instance d’une classe proxy pour les interfaces spécifiées qui répartit les appels de méthode vers le gestionnaire d’appel spécifié. |
| Notify() |
Réveille un thread unique qui attend le moniteur de cet objet. (Hérité de Object) |
| NotifyAll() |
Réveille tous les threads qui attendent le moniteur de cet objet. (Hérité de Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Définit la propriété Handle. (Hérité de Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
|
| ToArray<T>() |
Crée un tableau managé à partir de ce wrapper de tableau Java. (Hérité de Object) |
| ToString() |
Retourne une représentation de chaîne de l'objet. (Hérité de Object) |
| UnregisterFromRuntime() |
Annule l’inscription de cet homologue Java à partir du runtime d’interopérabilité. (Hérité de Object) |
| Wait() |
Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<> (Hérité de Object) |
| Wait(Int64, Int32) |
Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée. (Hérité de Object) |
| Wait(Int64) |
Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée. (Hérité de Object) |
Implémentations d’interfaces explicites
| Nom | Description |
|---|---|
| IJavaPeerable.Disposed() |
|
| IJavaPeerable.Finalized() |
|
| IJavaPeerable.JniObjectReferenceControlBlock |
|
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
|
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
|
| IJavaPeerable.SetPeerReference(JniObjectReference) |
|
| IJavaPeerable.UnregisterFromRuntime() |
|
Méthodes d’extension
| Nom | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtient le nom JNI du type de l’instance |
| JavaAs<TResult>(IJavaPeerable) |
Essayez de forcer |
| JavaCast<TResult>(IJavaObject) |
Effectue une conversion de type vérifiée par le runtime Android. |
| JavaCast<TResult>(IJavaObject) |
|
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Essayez de forcer |