Proxy クラス

定義

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

[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
継承
Proxy
属性
実装

注釈

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

インターフェイス 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);

またはより簡単に:

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

動的プロキシ クラス (単に以下のプロキシ クラスと呼ばれます) は、クラスの作成時に指定されたインターフェイスの一覧を実装するクラスであり、以下で説明するように動作します。

プロキシ インターフェイスは、プロキシ クラスによって実装されるインターフェイスです。

プロキシ インスタンスは、プロキシ クラスのインスタンスです。

各プロキシ インスタンスには、インターフェイス InvocationHandlerを実装する呼び出しハンドラー オブジェクトが関連付けられています。 プロキシ インターフェイスのいずれかを介したプロキシ インスタンスのメソッド呼び出しは、インスタンスの呼び出しハンドラーのメソッドに InvocationHandler#invoke invoke ディスパッチされ、プロキシ インスタンス、 java.lang.reflect.Method 呼び出されたメソッドを識別するオブジェクト、および引数を含む型 Object の配列が渡されます。 呼び出しハンドラーは、エンコードされたメソッド呼び出しを必要に応じて処理し、返される結果は、プロキシ インスタンスでのメソッド呼び出しの結果として返されます。

プロキシ クラスには、次のプロパティがあります。

<ul><li>Proxy クラスは、すべてのプロキシ インターフェイスが <パブリックである場合、em>public、final、abstract</em> ではありません。</李>

<li>プロキシ クラスは <>em 非パブリック、最終、およびプロキシ インターフェイスのいずれかが非パブリックの場合は abstract</em> ではありません。</李>

<li>プロキシ クラスの非修飾名が指定されていません。 ただし、文字列 "$Proxy" で始まるクラス名のスペースは、プロキシ クラス用に予約されている必要があります。

<li>プロキシ クラスは を拡張します java.lang.reflect.Proxy

<li>プロキシ クラスは、作成時に指定されたインターフェイスを同じ順序で正確に実装します。

<li>プロキシ クラスが非パブリック インターフェイスを実装する場合は、そのインターフェイスと同じパッケージで定義されます。 それ以外の場合、プロキシ クラスのパッケージも指定されません。 パッケージのシーリングでは、実行時にプロキシ クラスが特定のパッケージで正常に定義されるのを防ぐことはなく、同じクラス ローダーと特定の署名者を持つ同じパッケージによって既に定義されているクラスも発生しないことに注意してください。

<li>プロキシ クラスは作成時に指定されたすべてのインターフェイスを実装するため、そのClassオブジェクトで をgetInterfaces呼び出すと、同じインターフェイスのリスト (作成時に指定された順序で) を含む配列が返されます。そのClassオブジェクトで をgetMethods呼び出すと、それらのインターフェイス内のすべてのメソッドを含むオブジェクトのMethod配列が返され、呼び出getMethodすと予想どおりにプロキシ インターフェイス内のメソッドが検索されます。

<li>メソッドはProxy#isProxyClass Proxy.isProxyClass、プロキシ クラスが渡された場合は true を返します。つまり、 によって返されるクラス、または によってProxy.getProxyClassProxy.newProxyInstance返されるオブジェクトのクラス、それ以外の場合は false を返します。

<li>プロキシ クラスの は java.security.ProtectionDomain 、 などの java.lang.Objectブートストラップ クラス ローダーによって読み込まれたシステム クラスのコードと同じです。これは、プロキシ クラスのコードが信頼できるシステム コードによって生成されるためです。 通常、この保護ドメインには が付与 java.security.AllPermissionされます。

<li>各プロキシ クラスには、1 つの引数を受け取る 1 つのパブリック コンストラクター (インターフェイス InvocationHandlerの実装) があり、プロキシ インスタンスの呼び出しハンドラーを設定します。 リフレクション API を使用してパブリック コンストラクターにアクセスする必要はなく、 メソッドを呼び出すことでプロキシ インスタンスを作成することもできます。これは、 を呼び出 Proxy#newProxyInstance Proxy.newProxyInstance すアクションと、呼び出し Proxy#getProxyClass Proxy.getProxyClass ハンドラーを使用してコンストラクターを呼び出すアクションを組み合わせたものです。 </ul>

プロキシ インスタンスには、次のプロパティがあります。

<ul><li>プロキシ インスタンス proxy とそのプロキシ クラス Fooによって実装されたインターフェイスの 1 つを指定すると、次の式は true を返します。

{@code proxy instanceof Foo}

次のキャスト操作は成功します (をスローするのではなく ClassCastException)。

{@code (Foo) proxy}

<li>各プロキシ インスタンスには、コンストラクターに渡された呼び出しハンドラーが関連付けられています。 静的 Proxy#getInvocationHandler Proxy.getInvocationHandler メソッドは、引数として渡されたプロキシ インスタンスに関連付けられている呼び出しハンドラーを返します。

<li>プロキシ インスタンスでのインターフェイス メソッドの呼び出しは、そのメソッドのドキュメントで説明されているように、呼び出しハンドラーの InvocationHandler#invoke invoke メソッドにエンコードされ、ディスパッチされます。

<li>プロキシ インスタンスで でjava.lang.Object宣言された 、equals、または toString メソッドのhashCode呼び出しは、前述のように、インターフェイス メソッドの呼び出しがエンコードおよびディスパッチされるのと同じ方法で、呼び出しハンドラーのinvokeメソッドにエンコードおよびディスパッチされます。 に渡されるオブジェクトのMethod宣言クラスは になりますjava.lang.Objectinvoke から java.lang.Object 継承されたプロキシ インスタンスの他のパブリック メソッドはプロキシ クラスによってオーバーライドされないため、これらのメソッドの呼び出しは、 の java.lang.Objectインスタンスの場合と同様に動作します。 </ul>

<複数のプロキシ インターフェイス<で重複する h3>メソッド/h3>

プロキシ クラスの 2 つ以上のインターフェイスに同じ名前とパラメーター シグネチャを持つメソッドが含まれている場合、プロキシ クラスのインターフェイスの順序が重要になります。 このような重複する メソッド がプロキシ インスタンスで呼び出されると、 Method 呼び出しハンドラーに渡されるオブジェクトが、プロキシのメソッドが呼び出されたインターフェイスの参照型から宣言クラスが割り当て可能であるとは限りません。 この制限は、生成されたプロキシ クラスの対応するメソッド実装が、呼び出されたインターフェイスを特定できないために存在します。 したがって、プロキシ インスタンスで重複するメソッドが呼び出されると、 Method プロキシ クラスのインターフェイスの一覧にメソッド (直接またはスーパーインターフェイスを介して継承される) を含む最も重要なインターフェイスのメソッドの オブジェクトは、メソッド呼び出しが発生した参照型に関係なく、呼び出しハンドラーの invoke メソッドに渡されます。

プロキシ インターフェイスに、 の 、、または メソッドと同じ名前とパラメーター シグネチャhashCodeequalsを持つメソッドjava.lang.Objectが含まれている場合、そのようなメソッドがプロキシ インスタンスで呼び出されると、Method呼び出しハンドラーに渡されるオブジェクトは宣言クラスとして持ちますjava.lang.ObjecttoString 言い換えると、 のパブリックな非最終メソッド java.lang.Object は、呼び出しハンドラーに渡す Method オブジェクトを決定するために、すべてのプロキシ インターフェイスの前に論理的に先行します。

また、重複するメソッドが呼び出しハンドラーにディスパッチされる場合、メソッドは、invoke呼び出すことができるすべてのプロキシ インターフェイスの メソッドの 句でthrows、いずれかの例外型に割り当て可能なチェック済みの例外型のみをスローする場合があることに注意してください。 メソッドが invoke 、呼び出すことができるプロキシ インターフェイスのいずれかで メソッドによって宣言された例外の種類に割り当てられないチェックされた例外をスローした場合は、プロキシ インスタンスの呼び出しによってオフ UndeclaredThrowableException がスローされます。 この制限は、メソッドに渡されたオブジェクトで をgetExceptionTypesMethod呼び出すことによって返されるinvoke例外の種類のすべてが、 メソッドによって必ずしも正常にスローされるとは限らないことをinvoke意味します。

1.3 で追加されました。

の Java ドキュメント java.lang.reflect.Proxy

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

コンストラクター

Proxy(IInvocationHandler)

呼び出しハンドラーに指定された値を持つサブクラス (通常は動的プロキシ クラス) から新しい Proxy インスタンスを構築します。

Proxy(IntPtr, JniHandleOwnership)

JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

プロパティ

Class

この Objectのランタイム クラスを返します。

(継承元 Object)
H

このプロキシ インスタンスの呼び出しハンドラー。

Handle

基になる Android インスタンスへのハンドル。

(継承元 Object)
JniIdentityHashCode

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
JniPeerMembers

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

PeerReference

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
ThresholdClass

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。

ThresholdType

この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。

メソッド

Clone()

このオブジェクトのコピーを作成して返します。

(継承元 Object)
Dispose()

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
Dispose(Boolean)

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
Equals(Object)

他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。

(継承元 Object)
GetHashCode()

オブジェクトのハッシュ コード値を返します。

(継承元 Object)
GetInvocationHandler(Object)

指定したプロキシ インスタンスの呼び出しハンドラーを返します。

GetProxyClass(ClassLoader, Class[])

java.lang.Classクラス ローダーとインターフェイスの配列を指定して、プロキシ クラスの オブジェクトを返します。

IsProxyClass(Class)

指定したクラスが メソッドまたは メソッドを使用して getProxyClass プロキシ クラスとして動的に生成された場合にのみ、true を newProxyInstance 返します。

JavaFinalize()

ガベージ コレクションがオブジェクトへの参照がなくなったと判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。

(継承元 Object)
NewProxyInstance(ClassLoader, Class[], IInvocationHandler)

メソッド呼び出しを指定した呼び出しハンドラーにディスパッチする、指定したインターフェイスのプロキシ クラスのインスタンスを返します。

Notify()

このオブジェクトのモニターで待機している 1 つのスレッドをウェイクアップします。

(継承元 Object)
NotifyAll()

このオブジェクトのモニターで待機しているすべてのスレッドをウェイクアップします。

(継承元 Object)
SetHandle(IntPtr, JniHandleOwnership)

Handle プロパティを設定します。

(継承元 Object)
ToArray<T>()

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
ToString()

オブジェクトの文字列形式を返します。

(継承元 Object)
UnregisterFromRuntime()

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
Wait()

現在のスレッドが起動するまで待機します。通常<>は、通知</em> または <em>割り込み</em によって待機します>。

(継承元 Object)
Wait(Int64)

現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。

(継承元 Object)

明示的なインターフェイスの実装

IJavaPeerable.Disposed()

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
IJavaPeerable.Finalized()

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

GetJniTypeName(IJavaPeerable)

Proxy は、動的プロキシ クラスとインスタンスを作成するための静的メソッドを提供します。また、これらのメソッドによって作成されるすべての動的プロキシ クラスのスーパークラスでもあります。

適用対象