- java.lang.Object
-
- jdk.dynalink.beans.BeansLinker
-
- すべての実装されたインタフェース:
GuardingDynamicLinker
public class BeansLinker extends Object implements GuardingDynamicLinker
通常のJavaオブジェクト用のリンカー。 通常、DynamicLinkerFactory
によって最終的なフォールバック・リンカーとして使用されるため、他のリンカーが認識しなかったすべてのオブジェクトに呼び出しをリンクする機会が与えられます。 特に、このリンカーは:StandardNamespace.PROPERTY
ネームスペース内のStandardOperation.SET
およびStandardOperation.GET
操作のプロパティ・セッターおよびゲッターとして、フォームsetXxx()
、getXxx()
、およびisXxx()
のすべてのパブリック・メソッドを公開StandardNamespace.METHOD
ネームスペースでStandardOperation.GET
操作の検索のためのすべての公開メソッドを公開します。StandardOperation.CALL
を使用して検索されたメソッドを呼び出すことができます。- 同じ名前のプロパティのゲッターやセッターがない限り、すべてのパブリック・フィールドをプロパティとして公開
- ネイティブJava配列の要素、
List
およびMap
オブジェクトをStandardOperation.GET
およびStandardOperation.SET
操作としてStandardNamespace.ELEMENT
ネームスペースに公開 - Java配列
Collection
およびMap
オブジェクトのlength
という仮想プロパティを公開 StandardOperation.NEW
をJava配列を表す静的クラス・オブジェクトを含むコンストラクタへの呼び出しとしてStaticClass
のインスタンスに公開する(それらのコンストラクタは作成する配列の長さを表す単一のint
パラメータをとります);StaticClass
オブジェクトのインスタンス・メソッド、フィールド、およびプロパティがどのように公開されるかと同様に、静的メソッド、フィールド、クラスのプロパティを公開します。Class
のインスタンスにstatic
という名前の仮想プロパティを公開し、StaticClass
にアクセスします。
「オーバーロードされたメソッドの解決」は、プロパティ・セッター、メソッド、およびコンストラクタに対して自動的に実行されます。 さらに、手動のオーバーロードされたメソッドの選択は、コール・サイトで明示的な署名(たとえば
StandardOperation.GET.withNamespace(METHOD).named("parseInt(String,int)")
)を含むメソッドの名前を指定することでサポートされます。これらのクラス・パッケージに関係なく、そのようなシグネチャで非修飾クラス名を使用できます。同じ非修飾名。 修飾されていないクラス名によって選択のあいまいさが発生する場合は、完全修飾クラス名を使用する必要があります。(それは非常にまれです)。 その機能をアタッチする論理的な場所がないため、コンストラクタのオーバーロードされた解像度は自動的ではありませんが、言語がこの機能を提供したい場合は、getConstructorMethod(Class, String)
を便利なビルディング・ブロックとして使用できます。「可変引数呼び出し」は、メソッドとコンストラクタの両方で処理されます。
「コーラー・センシティブなメソッド」は、それ以外の場合はパブリックであり、リンク・リクエストには完全な強度の
MethodHandles.Lookup
オブジェクトを持ち、弱参照やパブリック・ルック・アップを持たないコール・サイト記述子があればリンクできます。「不足しているメンバーを処理するための動作」は、
MissingMemberHandlerFactory
をconstructor
に渡すことでカスタマイズできます。このクラスは、
getLinkerForClass(Class)
メソッドを使用したクラスごとのリンカーへのアクセスだけでなく、クラスおよびクラス・インスタンスで利用可能なプロパティおよびメソッド名の検出のためのさまざまなメソッドも公開しています。
-
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 BeansLinker()
新しいBeanリンカーを作成します。BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
不足しているメンバー・ハンドラを作成するために、指定されたファクトリで新しいBeanリンカーを作成します。
-
メソッドのサマリー
すべてのメソッド 静的メソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 static Object
getConstructorMethod(Class<?> clazz, String signature)
指定されたクラスのコンストラクタの動的メソッドと指定されたシグネチャを返します。GuardedInvocation
getGuardedInvocation(LinkRequest request, LinkerServices linkerServices)
コール・サイトで、指定された引数を持つ特定の呼び出しに適切な保護された呼び出しを作成します。static Set<String>
getInstanceMethodNames(Class<?> clazz)
クラスのすべてのインスタンス・メソッドの名前のセットを返します。TypeBasedGuardingDynamicLinker
getLinkerForClass(Class<?> clazz)
特定の単一クラスのBeanリンカーを返します。static Set<String>
getReadableInstancePropertyNames(Class<?> clazz)
クラスのすべての読み込み可能なインスタンス・プロパティの名前のセットを返します。static Set<String>
getReadableStaticPropertyNames(Class<?> clazz)
クラスのすべての読み込み可能な静的プロパティの名前のセットを返します。static Set<String>
getStaticMethodNames(Class<?> clazz)
クラスのすべての静的メソッドの名前のセットを返します。static Set<String>
getWritableInstancePropertyNames(Class<?> clazz)
クラスのすべての書き込み可能なインスタンス・プロパティの名前のセットを返します。static Set<String>
getWritableStaticPropertyNames(Class<?> clazz)
クラスのすべての書き込み可能な静的プロパティの名前のセットを返します。static boolean
isDynamicConstructor(Object obj)
オブジェクトがJavaコンストラクタ(getConstructorMethod(Class, String)
で取得)の場合はtrueを返します。static boolean
isDynamicMethod(Object obj)
オブジェクトがJavaの動的メソッド(たとえば、JavaオブジェクトまたはStaticClass
またはgetConstructorMethod(Class, String)
を使用してGET:METHOD
操作によって取得されたもの)の場合はtrueを返します。
-
-
-
コンストラクタの詳細
-
BeansLinker
public BeansLinker()
新しいBeanリンカーを作成します。null
が欠落メンバー・ハンドラ・ファクトリとして渡されたBeansLinker(MissingMemberHandlerFactory)
に相当し、不足しているメンバーをリンクして評価するためのデフォルトの動作となります。
-
BeansLinker
public BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
不足しているメンバー・ハンドラを作成するために、指定されたファクトリで新しいBeanリンカーを作成します。 デフォルトの動作が適切であれば、渡されたファクトリはnullになります。 詳細については、MissingMemberHandlerFactory
を参照してください。- パラメータ:
missingMemberHandlerFactory
- 不足しているメンバーの操作のためのハンドラを作成するためのファクトリです。
-
-
メソッドの詳細
-
getLinkerForClass
public TypeBasedGuardingDynamicLinker getLinkerForClass(Class<?> clazz)
特定の単一クラスのBeanリンカーを返します。 言語ランタイム・リンカーの一部のクラスのリンク動作をオーバーライドまたは拡張する必要がある場合でも、場合によっては既定の動作に委任したい場合に役立ちます。- パラメータ:
clazz
- クラス- 戻り値:
- そのクラスのBeanリンカー
-
isDynamicMethod
public static boolean isDynamicMethod(Object obj)
オブジェクトがJavaの動的メソッド(たとえば、JavaオブジェクトまたはStaticClass
またはgetConstructorMethod(Class, String)
を使用してGET:METHOD
操作によって取得されたもの)の場合はtrueを返します。- パラメータ:
obj
- テストするオブジェクトは、Javaの動的メソッドです。- 戻り値:
- 動的メソッドの場合はtrue、そうでない場合はfalse。
-
isDynamicConstructor
public static boolean isDynamicConstructor(Object obj)
オブジェクトがJavaコンストラクタ(getConstructorMethod(Class, String)
で取得)の場合はtrueを返します。- パラメータ:
obj
- 私たちがJavaコンストラクタであることをテストしたいオブジェクト。- 戻り値:
- コンストラクタの場合はtrue、そうでない場合はfalse。
-
getConstructorMethod
public static Object getConstructorMethod(Class<?> clazz, String signature)
指定されたクラスのコンストラクタの動的メソッドと指定されたシグネチャを返します。 このメソッドは、StaticClass
オブジェクトが明示的なシグネチャ選択なしでオーバーロードされたコンストラクタとして動作するため、Dynalinkによってこの機能が公開されないため、明示的なシグネチャに基づいてオーバーロードされたコンストラクタを選択する機能を公開するのに便利です。 使用例は:getConstructorMethod(java.awt.Color.class, "int, int, int")
。- パラメータ:
clazz
- クラスsignature
- コンストラクタの完全なシグネチャ。 プリミティブ型の名前、通常のJava表記(e.g."int[]"
)の配列名を使用する方法に注意してください。通常は、特定のパラメータ位置にあいまいさがない限り、"java.lang.String, java.util.List"
ではなく"String, List"
などの非修飾クラス名を使用することもできます。- 戻り値:
- コンストラクタの動的メソッド。指定されたシグネチャを持つコンストラクタが存在しない場合はnullを返します。
-
getReadableInstancePropertyNames
public static Set<String> getReadableInstancePropertyNames(Class<?> clazz)
クラスのすべての読み込み可能なインスタンス・プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての読み込み可能なインスタンス・プロパティの名前のセット。
-
getWritableInstancePropertyNames
public static Set<String> getWritableInstancePropertyNames(Class<?> clazz)
クラスのすべての書き込み可能なインスタンス・プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての書き込み可能なインスタンス・プロパティの名前のセット。
-
getInstanceMethodNames
public static Set<String> getInstanceMethodNames(Class<?> clazz)
クラスのすべてのインスタンス・メソッドの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべてのインスタンス・メソッドの名前のセット。
-
getReadableStaticPropertyNames
public static Set<String> getReadableStaticPropertyNames(Class<?> clazz)
クラスのすべての読み込み可能な静的プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての読み込み可能な静的プロパティの名前のセット。
-
getWritableStaticPropertyNames
public static Set<String> getWritableStaticPropertyNames(Class<?> clazz)
クラスのすべての書き込み可能な静的プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての書き込み可能な静的プロパティの名前のセット。
-
getStaticMethodNames
public static Set<String> getStaticMethodNames(Class<?> clazz)
クラスのすべての静的メソッドの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての静的メソッドの名前のセット。
-
getGuardedInvocation
public GuardedInvocation getGuardedInvocation(LinkRequest request, LinkerServices linkerServices) throws Exception
インタフェースからコピーされた説明:GuardingDynamicLinker
コール・サイトで、指定された引数を持つ特定の呼び出しに適切な保護された呼び出しを作成します。- 定義:
- インタフェース
GuardingDynamicLinker
内のgetGuardedInvocation
- パラメータ:
request
- 特定の呼び出しをリンクするリクエストを記述するオブジェクトlinkerServices
- リンカー・サービス- 戻り値:
- 引数に適したメソッド・ハンドルで保護された呼び出しと、失敗した場合に再リンクを引き起こすガード条件。 呼び出しを解決できない場合はnullを返す必要があります。 返された呼び出しが無条件の(実際にはまれです)の場合、戻り値のガードはnullになります。 呼び出しには、リンケージの非同期無効化のための任意の数の切り替えポイント、および(常に評価される
instanceof
ガードよりもまれであるが期待されるClassCastException
に依存する方が速いことがよくあります)の再リンクをトリガーする予期される例外条件を記述するThrowable
サブクラスを含めることもできます。 リンカーは、リンク・リクエストのコール・サイト記述子にあるパラメータ型と一致するパラメータ型を持つ呼び出しを生成する必要がありますが、精度を失う変換のみでコール・サイトで期待される戻り型と一致するようにしてはいけません詳細については、LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)
を参照してください。 - 例外:
Exception
- 何らかの理由で操作が失敗した場合
-
-