MethodHandle クラス

定義

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

[Android.Runtime.Register("java/lang/invoke/MethodHandle", ApiSince=26, DoNotGenerateAcw=true)]
public abstract class MethodHandle : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/MethodHandle", ApiSince=26, DoNotGenerateAcw=true)>]
type MethodHandle = class
    inherit Object
継承
MethodHandle
属性

注釈

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。 これらの変換は非常に一般的であり、#asType 変換、#bindTo 挿入、java.lang.invoke.MethodHandles#dropArguments の削除、java.lang.invoke.MethodHandles#filterArguments の置換などのパターンが含まれます。

<h1>メソッド ハンドルの内容</h1> メソッド ハンドルは、パラメーターと戻り値の型に従って動的かつ厳密に型指定されます。 これらは、基になるメソッドの名前または定義クラスによって区別されません。 メソッド ハンドルは、メソッド ハンドルの独自の #type 型記述子と一致するシンボリック型記述子を使用して呼び出す必要があります。

すべてのメソッド ハンドルは、アクセサーを介してその型記述子を #type type 報告します。 この型記述子はオブジェクトであり java.lang.invoke.MethodType MethodType 、その構造体は一連のクラスであり、そのうちの 1 つはメソッドの戻り値の型 (または void.class 存在しない場合) です。

メソッド ハンドルの型は、受け入れる呼び出しの種類と、それに適用される変換の種類を制御します。

メソッド ハンドルには、 と #invoke invokeと呼ばれる特別な呼び#invokeExact invokeExact出しメソッドのペアが含まれています。 どちらの呼び出し元メソッドも、引数と戻り値の変換によって変更された、メソッド ハンドルの基になるメソッド、コンストラクター、フィールド、またはその他の操作に直接アクセスできます。 どちらの呼び出し元も、メソッド ハンドルの独自の型と完全に一致する呼び出しを受け入れます。 プレーンで不正確な呼び出し側は、他の呼び出しの種類の範囲も受け入れます。

メソッド ハンドルは不変であり、表示状態はありません。 もちろん、これらは、状態を示す基になるメソッドまたはデータにバインドできます。 Java メモリ モデルに関して、すべてのメソッド ハンドルは、すべての (内部) フィールドが最終的な変数であるかのように動作します。 つまり、アプリケーションに表示されるメソッド ハンドルは常に完全に形成されます。 これは、データ 競合の共有変数を介してメソッド ハンドルが発行された場合でも当てはまります。

メソッド ハンドルをユーザーがサブクラス化することはできません。 実装では、内部サブクラスが作成される場合と作成されない場合があります。このサブクラスは MethodHandle 、操作を java.lang.Object#getClass Object.getClass 介して表示される可能性があります。 メソッド ハンドル クラス階層 (存在する場合) は、随時、または異なるベンダーからの実装間で変化する可能性があるため、プログラマは特定のクラスからメソッド ハンドルに関する結論を導き出すべきではありません。

<h1>メソッド ハンドルコンパイル</h1> Java メソッド呼び出し式の名前付け invokeExact 。または invoke Java ソース コードからメソッド ハンドルを呼び出すことができます。 ソース コードの観点から、これらのメソッドは任意の引数を受け取ることができ、その結果は任意の戻り値の型にキャストできます。 これは正式には、呼び出し元メソッドObjectに型と可変アリティObject引数を返すことによって実現されますが、em シグネチャポリモーフィズム</em> と呼ばれる<>追加の品質を持ち、この自由な呼び出しを JVM 実行スタックに直接接続します。

仮想メソッドの場合と同様に、ソース レベルの 呼び出しは 命令にinvokeExactinvokevirtualコンパイルされますinvoke。 さらに異常に、コンパイラは実際の引数型を記録する必要があり、引数に対してメソッド呼び出し変換を実行しない可能性があります。 代わりに、独自の変換されていない型に従ってスタックにプッシュする必要があります。 メソッド ハンドル オブジェクト自体は、引数の前にスタックにプッシュされます。 コンパイラは、引数と戻り値の型を記述するシンボリック型記述子を使用してメソッド ハンドルを呼び出します。

完全なシンボリック型記述子を発行するには、コンパイラも戻り値の型を決定する必要があります。 これは、メソッド呼び出し式が存在する場合は キャスト、呼び出しが式の場合は それ以外Objectvoidの場合は、呼び出しがステートメントの場合は キャストに基づいています。 キャストはプリミティブ型にできます (ただし、 は使用できません void)。

コーナーケースとして、キャストされていない null 引数には のシンボリック型記述子 java.lang.Voidが与えられます。 null 参照以外の型の参照がないため、型VoidVoidのあいまいさは無害です。

<h1>メソッド ハンドル呼び出し</h1> 命令が初めて invokevirtual 実行されるときは、命令内の名前をシンボル的に解決し、メソッド呼び出しが静的に有効であることを確認することによってリンクされます。 これは、 と の呼び出しinvokeinvokeExact当てはまります。 この場合、コンパイラによって出力されるシンボリック型記述子が正しい構文かどうかを確認し、それに含まれる名前が解決されます。 したがって、 invokevirtual シンボリック型記述子が構文的に整形式であり、型が存在する限り、メソッド ハンドルを呼び出す命令は常にリンクします。

invokevirtualがリンク後に実行されると、受信メソッド ハンドルの型が JVM によって最初にチェックされ、シンボリック型記述子と一致することが確認されます。 型の一致が失敗した場合は、呼び出し元が呼び出しているメソッドが、呼び出される個々のメソッド ハンドルに存在しないことを意味します。

invokeExact場合、呼び出しの型記述子 (シンボリック型名の解決後) は、受信側のメソッド ハンドルのメソッド型と完全に一致する必要があります。 プレーンで不正確な invoke場合、解決された型記述子は受信側の #asType asType メソッドに対する有効な引数である必要があります。 したがって、プレーン invoke は よりも invokeExact許容されます。

型の一致後、 invokeExact メソッド ハンドルの基になるメソッドを直接呼び出してすぐに呼び出します (場合によっては、その他の動作)。

プレーン invoke の呼び出しは、 の invokeExact呼び出しと同じように機能します。呼び出し元によって指定されたシンボリック型記述子が、メソッド ハンドルの独自の型と完全に一致する場合です。 型が一致しない場合は、 invoke の呼び出しによってと同様に、受信メソッド ハンドルの型を調整して、正確に呼び #asType asType出し可能なメソッド ハンドル M2を取得しようとします。 これにより、呼び出し元と呼び出し先の間のメソッド型のより強力なネゴシエーションが可能になります。

(<em>Note:</em> 調整されたメソッド ハンドル M2 は直接監視できないため、実装は具体化する必要はありません)。

<h1>呼び出しチェック</h1> 一般的なプログラムでは、通常、メソッド ハンドルの型の一致は成功します。 しかし、一致が失敗した場合、JVM は、 を直接 (のinvokeExact場合は ) スローするか、 の呼び出しasTypeが失敗した場合と同様に間接的に invokeをスローWrongMethodTypeExceptionします。

したがって、静的に型指定されたプログラムでリンケージ エラーとして表示される可能性があるメソッド型の不一致は、メソッド ハンドルを使用するプログラムで動的 WrongMethodTypeException として表示される可能性があります。

メソッド型には "live" Class オブジェクトが含まれているため、メソッド型の一致では型名とクラス ローダーの両方が考慮されます。 したがって、メソッド ハンドル M が 1 つのクラス ローダー L1 で作成され、別 L2の で使用されている場合でも、 で解決された呼び出し元のシンボリック型記述子は、 で L2解決された元の呼び出し先メソッドのシンボリック型記述子と照合されるため、 L1メソッド ハンドル呼び出しは型セーフです。 の解決 L1 は、 が M 作成され、その型が割り当てられるときに発生し、 の L2 解決は命令が invokevirtual リンクされたときに発生します。

型記述子のチェックとは別に、基になるメソッドを呼び出すメソッド ハンドルの機能は無制限です。 メソッド ハンドルが、そのメソッドにアクセスできるクラスによって非パブリック メソッドに形成されている場合、結果のハンドルは、そのメソッドへの参照を受け取る呼び出し元が任意の場所で使用できます。

リフレクション メソッドが呼び出されるたびにアクセスがチェックされる Core Reflection API とは異なり、メソッド ハンドルの作成時にメソッド ハンドルのアクセス チェックが実行されます。 (下記参照) の ldc 場合は、定数メソッド ハンドルの基になる定数プール エントリをリンクする一環として、アクセス チェックが実行されます。

したがって、非パブリック メソッドまたは非パブリック クラスのメソッドに対するハンドルは、通常はシークレットにしておく必要があります。 信頼されていないコードからの使用が無害でない限り、信頼されていないコードに渡さないでください。

<h1>メソッド ハンドルの作成</h1> Java コードでは、そのコードからアクセスできる任意のメソッド、コンストラクター、またはフィールドに直接アクセスするメソッド ハンドルを作成できます。 これは、 と呼ばれる java.lang.invoke.MethodHandles.Lookup MethodHandles.Lookup 反射型の機能ベースの API を使用して行われます。たとえば、 から java.lang.invoke.MethodHandles.Lookup#findStatic Lookup.findStatic静的メソッド ハンドルを取得できます。 また、 などの java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflectCore Reflection API オブジェクトからの変換メソッドもあります。

クラスや文字列と同様に、アクセス可能なフィールド、メソッド、コンストラクターに対応するメソッド ハンドルは、バイトコードによって ldc 読み込まれる定数としてクラス ファイルの定数プールで直接表すこともできます。 新しい種類の定数プール エントリ である は、 CONSTANT_MethodHandle関連付けられている CONSTANT_MethodrefCONSTANT_InterfaceMethodref、または CONSTANT_Fieldref 定数プール エントリを直接参照します。 (メソッド ハンドル定数の詳細については、Java 仮想マシン仕様のセクション 4.4.8 および 5.4.3.5 を参照してください)。

参照によって生成されるメソッド ハンドル、または変数 arity 修飾子ビット (0x0080) を持つメソッドまたはコンストラクターからの定数読み込みでは、 の助けを借りて #asVarargsCollector asVarargsCollector定義されたかのように、対応する変数アリティがあります。

メソッド参照は、静的メソッドまたは非静的メソッドを参照できます。 非静的な場合、メソッド ハンドル型には、他の引数の前に付加された明示的なレシーバー引数が含まれます。 メソッド ハンドルの型では、最初のレシーバー引数は、メソッドが最初に要求されたクラスに従って型指定されます。 (たとえば、 を使用して ldc非静的メソッド ハンドルを取得する場合、レシーバーの型は定数プール エントリでという名前のクラスになります)。

メソッド ハンドル定数は、対応するバイトコード命令と同じリンク時アクセス チェックの対象となり ldc 、バイトコードの動作でこのようなエラーがスローされる場合、命令は対応するリンケージ エラーをスローします。

この補助として、保護されたメンバーへのアクセスは、アクセスするクラスまたはそのサブクラスの 1 つの受信側のみに制限されます。また、アクセスするクラスは、保護されたメンバーの定義クラスのサブクラス (またはパッケージ兄弟) である必要があります。 メソッド参照が、現在のパッケージの外部にあるクラスの保護された非静的メソッドまたはフィールドを参照している場合、receiver 引数はアクセスするクラスの型に絞り込まれます。

仮想メソッドへのメソッド ハンドルが呼び出されると、メソッドは常にレシーバー (つまり最初の引数) で検索されます。

特定の仮想メソッド実装に対する非仮想メソッド ハンドルを作成することもできます。 これらは、受信側の種類に基づいて仮想ルックアップを実行しません。 このようなメソッド ハンドルは、同じメソッドに対する invokespecial 命令の効果をシミュレートします。

<h1>使用法の<例/h1> 使用例をいくつか次に示します。 <blockquote>

{@code
            Object x, y; String s; int i;
            MethodType mt; MethodHandle mh;
            MethodHandles.Lookup lookup = MethodHandles.lookup();
            // mt is (char,char)String
            mt = MethodType.methodType(String.class, char.class, char.class);
            mh = lookup.findVirtual(String.class, "replace", mt);
            s = (String) mh.invokeExact("daddy",'d','n');
            // invokeExact(Ljava/lang/String;CC)Ljava/lang/String;
            assertEquals(s, "nanny");
            // weakly typed invocation (using MHs.invoke)
            s = (String) mh.invokeWithArguments("sappy", 'p', 'v');
            assertEquals(s, "savvy");
            // mt is (Object[])List
            mt = MethodType.methodType(java.util.List.class, Object[].class);
            mh = lookup.findStatic(java.util.Arrays.class, "asList", mt);
            assert(mh.isVarargsCollector());
            x = mh.invoke("one", "two");
            // invoke(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
            assertEquals(x, java.util.Arrays.asList("one","two"));
            // mt is (Object,Object,Object)Object
            mt = MethodType.genericMethodType(3);
            mh = mh.asType(mt);
            x = mh.invokeExact((Object)1, (Object)2, (Object)3);
            // invokeExact(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            assertEquals(x, java.util.Arrays.asList(1,2,3));
            // mt is ()int
            mt = MethodType.methodType(int.class);
            mh = lookup.findVirtual(java.util.List.class, "size", mt);
            i = (int) mh.invokeExact(java.util.Arrays.asList(1,2,3));
            // invokeExact(Ljava/util/List;)I
            assert(i == 3);
            mt = MethodType.methodType(void.class, String.class);
            mh = lookup.findVirtual(java.io.PrintStream.class, "println", mt);
            mh.invokeExact(System.out, "Hello, world.");
            // invokeExact(Ljava/io/PrintStream;Ljava/lang/String;)V
            }

</blockquote> 上記の または plain invokeinvokeExact呼び出しはそれぞれ、次のコメントに示されているシンボリック型記述子を使用して、1 つの invokevirtual 命令を生成します。 これらの例では、ヘルパー メソッド assertEquals は、その引数を呼び出し java.util.Objects#equals(Object,Object) Objects.equals 、結果が true であることをアサートするメソッドであると見なされます。

<h1>Exceptions</h1> メソッド invokeExactinvoke は、 をスローするように宣言されています。これは、メソッド ハンドルがスロー java.lang.Throwable Throwableできる内容に静的な制限がないことを意味します。 JVMはチェックされた例外とチェックされていない例外を区別しないため(もちろん、クラス以外)、チェックされた例外をメソッドハンドル呼び出しに割り当てることからバイトコード形状に特に影響はありません。 ただし、Java ソース コードでは、メソッド ハンドル呼び出しを実行するメソッドは、 を明示的にスロー Throwableするか、またはすべてのスロー可能なをローカルでキャッチし、コンテキストで有効なメソッドのみを再スローし、無効なメソッドをラップする必要があります。

<h1>"sigpoly">Signature ポリモーフィズム</h1> と plain invokeinvokeExact通常とは異なるコンパイルとリンケージ動作は、em>シグネチャポリモーフィズム</em> という用語<によって参照されます。 Java 言語仕様で定義されているように、シグネチャポリモーフィック メソッドは、幅広い呼び出しシグネチャと戻り値の型のいずれかで動作できるメソッドです。

ソース コードでは、要求されたシンボリック型記述子に関係なく、シグネチャポリモーフィック メソッドの呼び出しがコンパイルされます。 通常どおり、Java コンパイラは、指定されたシンボリック型記述子を持つ命令を、名前付きメソッドに対して出力 invokevirtual します。 通常とは異なる点として、シンボリック型記述子は、メソッド宣言からではなく、実際の引数と戻り値の型から派生します。

JVM は、署名ポリモーフィック呼び出しを含むバイトコードを処理すると、シンボリック型記述子に関係なく、そのような呼び出しを正常にリンクします。 (型の安全性を維持するために、JVM は、他の場所で説明されているように、適切な動的型チェックを使用してこのような呼び出しを保護します)。

これらのメソッドの変換されていないシンボリック型記述子を出力するには、コンパイラ バックエンドを含むバイトコード ジェネレーターが必要です。 シンボリック リンケージを決定するツールは、リンケージ エラーを報告せずに、このような変換されていない記述子を受け入れる必要があります。

<h1>メソッド ハンドルと Core Reflection API</h1> 間の相互運用 API のファクトリ メソッドを java.lang.invoke.MethodHandles.Lookup Lookup 使用すると、Core Reflection API オブジェクトで表されるクラス メンバーは、動作と同等のメソッド ハンドルに変換できます。 たとえば、 を使用してjava.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect反射java.lang.reflect.Method Methodをメソッド ハンドルに変換できます。 結果として得られるメソッド ハンドルは、通常、基になるクラス メンバーへのより直接的で効率的なアクセスを提供します。

特殊なケースとして、Core Reflection API を使用してこのクラスのシグネチャポリモーフィック メソッド invokeExact またはプレーン invoke を表示すると、通常の非ポリモーフィック メソッドとして表示されます。 によって表示される java.lang.Class#getDeclaredMethod Class.getDeclaredMethod反射的な外観は、この API の特殊な状態の影響を受けません。 たとえば、 は、 java.lang.reflect.Method#getModifiers Method.getModifiers 同様に宣言されたメソッドに必要な修飾子ビット (この場合 nativevarargs ビットを含む) を正確に報告します。

反映されたメソッドと同様に、これらのメソッド (反映された場合) は を介して java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke呼び出すことができます。 ただし、このようなリフレクション呼び出しでは、メソッド ハンドル呼び出しは発生しません。 このような呼び出しでは、必要な引数 (型 Object[]の 1 つ) が渡された場合、引数は無視され、 UnsupportedOperationExceptionがスローされます。

命令はシンボリック型記述子の下でメソッド ハンドルをネイティブに呼び出すことができるため invokevirtual 、この反射ビューはバイトコードを介したこれらのメソッドの通常の表示と競合します。 したがって、これら2つのネイティブメソッドは、によって反射的に見 Class.getDeclaredMethodたときに、プレースホルダーのみと見なされ得る。

特定の型記述子の呼び出し元メソッドを取得するには、 または を使用 java.lang.invoke.MethodHandles#exactInvoker MethodHandles.exactInvokerします java.lang.invoke.MethodHandles#invoker MethodHandles.invokerjava.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtualまた、API は、指定された型記述子 に対して、 または プレーン invokeを呼び出invokeExactすメソッド ハンドルを返すこともできます。

<h1>メソッド ハンドルと Java ジェネリック間の相互運用/h1> メソッド ハンドルは、Java ジェネリック<型で宣言されているメソッド、コンストラクター、またはフィールドで取得できます。 Core Reflection API と同様に、メソッド ハンドルの型はソース レベル型の消去から構築されます。 メソッド ハンドルが呼び出されると、その引数の型、または戻り値のキャスト型がジェネリック型または型インスタンスになる場合があります。 これが発生した場合、コンパイラは命令のシンボリック型記述子 invokevirtual を構築するときに、それらの型を消去に置き換えます。

メソッド ハンドルは、関数に似た型とパラメーター化された Java 型の間に 3 つの不一致があるため、Java パラメーター化 (ジェネリック) 型の観点から関数に似た型を表しません。 <ul><li>メソッドの型は、引数がないから許容される引数の最大数まで、考えられるすべての範囲に及びます。 ジェネリックは可変ではありません。そのため、これを表すことはできません。</li li><>メソッド型はプリミティブ型の引数を指定できます。Java ジェネリック型の範囲は指定できません。</li li><>メソッド ハンドル (組み合わせ子) に対する上位関数は、多くの場合、複数のアリを含む幅広い関数型にわたってジェネリックです。 このようなジェネリック性を Java 型パラメーターで表すことはできません。</li></ul>

<h1>"maxarity">Arity limits</h1> JVM は、任意の種類のすべてのメソッドとコンストラクターに対して、255 個の積み上げ引数の絶対制限を課します。 この制限は、特定のケースでは、ul<>li>A long またはdouble引数数 (アリティ制限の目的で) を 2 つの引数スロットとして制限するように見える場合<があります。 <li>非静的メソッドは、 メソッドが呼び出されるオブジェクトに対して追加の引数を使用します。 <li>コンストラクターは、構築中のオブジェクトに対して追加の引数を使用します。 <li>メソッドは rsquo を処理&。s invoke メソッド (またはその他のシグネチャ ポリモーフィック メソッド) は非仮想であり、仮想以外のレシーバー オブジェクトに加えて、メソッド ハンドル自体に対して追加の引数を使用します。 </ul> これらの制限は、スタックされた引数に対する JVM 制限のためだけに、特定のメソッド ハンドルを作成できないことを意味します。 たとえば、静的 JVM メソッドが 255 個の引数を受け取る場合、メソッド ハンドルを作成できません。 不可能なメソッド型を使用してメソッド ハンドルを作成しようとすると、 が発生します IllegalArgumentException。 特に、メソッドハンドル’s 型は、正確な最大 255 のアリティを持つ必要はありません。

java.lang.invoke.MethodHandleJava ドキュメント。

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

コンストラクター

MethodHandle(IntPtr, JniHandleOwnership)

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

プロパティ

Class

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

(継承元 Object)
Handle

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

(継承元 Object)
IsVarargsCollector

このメソッド ハンドルが変数のアリティ呼び出し #asVarargsCollector サポートしているかどうかを判断します。

JniIdentityHashCode

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
JniPeerMembers

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

PeerReference

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
ThresholdClass

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

ThresholdType

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

メソッド

AsCollector(Class, Int32)

<em>配列収集/em> メソッド ハンドルを<作成します。これは、指定された数の末尾の位置引数を受け取り、それらを配列引数に収集します。

AsCollector(Int32, Class, Int32)

特定の<位置から始まる指定された数の位置引数を<受け取り、それらを配列引数に収集する em>配列収集/em> メソッド ハンドルを作成します。

AsFixedArity()

現在の<>メソッド ハンドルと同等の em 固定アリティ</em> メソッド ハンドルを作成します。

AsSpreader(Class, Int32)

末尾>の配列引数を<受け取り、その要素を<位置引数として広げる em 配列拡散/em> メソッド ハンドルを作成します。

AsSpreader(Int32, Class, Int32)

特定の<位置で配列引数を<受け取り、その要素を配列の代わりに位置引数として広げる、em>配列拡散/em> メソッド ハンドルを作成します。

AsType(MethodType)

現在のメソッド ハンドルの型を新しい型に適合させるアダプター メソッド ハンドルを生成します。

AsVarargsCollector(Class)

任意の <数の後続の位置引数を受け入れて配列引数に収集できる em>変数 arity</em> アダプターを作成します。

BindTo(Object)

メソッド ハンドルを呼び出さずに、メソッド ハンドルの最初の引数に値 x をバインドします。

Clone()

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

(継承元 Object)
Dispose()

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
Dispose(Boolean)

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
Equals(Object)

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

(継承元 Object)
GetHashCode()

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

(継承元 Object)
Invoke(Object[])

メソッド ハンドルを呼び出し、呼び出し元の型記述子を許可し、必要に応じて引数と戻り値に対して変換を実行します。

InvokeExact(Object[])

メソッド ハンドルを呼び出し、呼び出し元の型記述子を許可しますが、完全な型一致が必要です。

InvokeWithArguments(IList<Object>)

変数のアリティ呼び出しを実行し、指定された配列内の引数をメソッド ハンドルに渡します。これは、型 Objectのみを言及し、その arity が引数配列の長さである呼び出しサイトの inexact #invoke invoke を介して渡すかのように行います。

InvokeWithArguments(Object[])

変数のアリティ呼び出しを実行し、指定されたリスト内の引数をメソッド ハンドルに渡します。これは、型Objectのみを示す呼び出しサイトから inexact #invoke invoke を介して渡され、その arity が引数リストの長さである場合と同様です。

JavaFinalize()

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

(継承元 Object)
Notify()

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

(継承元 Object)
NotifyAll()

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

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

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

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

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
ToString()

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

(継承元 Object)
Type()

このメソッド ハンドルの種類を報告します。

UnregisterFromRuntime()

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
Wait()

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

(継承元 Object)
Wait(Int64)

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

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

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

(継承元 Object)
WithVarargs(Boolean)

ブール値フラグが true の場合、このメソッド ハンドルを変数のアリティ #asVarargsCollector するように調整します。それ以外の場合は固定アリティ #asFixedArity。

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

IJavaPeerable.Disposed()

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
IJavaPeerable.DisposeUnlessReferenced()

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
IJavaPeerable.Finalized()

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)
IJavaPeerable.JniManagedPeerState

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

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

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

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

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

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

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

(継承元 Object)

拡張メソッド

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

GetJniTypeName(IJavaPeerable)

メソッド ハンドルは、引数または戻り値の省略可能な変換を使用して、基になるメソッド、コンストラクター、フィールド、または同様の低レベル操作に対する型指定された、直接実行可能な参照です。

適用対象