- すべての実装されたインタフェース:
GuardingDynamicLinker
DynamicLinkerFactory
による最終的なフォールバック・リンカーとして使用されるため、ほかのリンカーが認識していないすべてのオブジェクトへの呼び出しをリンクする機会が与えられます。 具体的には、このリンカーは次のことを行います:
- オブジェクトが
record
の場合は、StandardNamespace.PROPERTY
ネームスペース内のStandardOperation.GET
操作のプロパティgetterとして、レコード・コンポーネントのすべてのパブリック・アクセサを公開 StandardNamespace.PROPERTY
ネームスペースのStandardOperation.SET
およびStandardOperation.GET
操作に対するプロパティ・セッターおよびgetterとして、setXxx()
、getXxx()
およびisXxx()
形式のパブリック・メソッドをすべて公開します。ただし、レコード・コンポーネントgetterによってすでに処理されている名前のgetterを除きますStandardNamespace.METHOD
名前空間でStandardOperation.GET
操作の検索のためのすべての公開メソッドを公開します。StandardOperation.CALL
を使用して検索されたメソッドを呼び出すことができます。- 同じ名前のプロパティにゲッターまたはセッターがないかぎり、すべてのパブリック・フィールドをプロパティとして公開
- ネイティブJava配列、
List
およびMap
オブジェクトの要素を、StandardNamespace.ELEMENT
ネームスペース内のStandardOperation.GET
およびStandardOperation.SET
操作として公開 -
List
とMap
オブジェクトの要素の削除をStandardNamespace.ELEMENT
名前空間のStandardOperation.REMOVE
操作として公開 length
という名前の仮想プロパティを、Java配列、Collection
およびMap
オブジェクトで公開StaticClass
のインスタンスに対して、Java配列(それらのコンストラクタは作成する配列の長さを表す単一のint
パラメータをとります)を表す静的クラス・オブジェクトを含め、コンストラクタへのコールとしてStandardOperation.NEW
を公開StaticClass
オブジェクトで、インスタンス・メソッド、フィールドおよびプロパティの公開方法と同様の方法で、クラスの静的メソッド、フィールドおよびプロパティを公開します。Class
のインスタンスにstatic
という名前の仮想プロパティを公開し、StaticClass
にアクセスします。
「オーバーロードされたメソッドの解決」は、プロパティ・セッター、メソッドおよびコンストラクタに対して自動的に実行されます。 また、手動でのオーバーロード・メソッドの選択は、明示的なシグネチャを含むメソッドの名前をコール・サイトで指定することでサポートされます(例: StandardOperation.GET.withNamespace(METHOD).named("parseInt(String,int)")
)。このようなシグネチャでは、これらのクラスのパッケージに関係なく、非修飾クラス名を使用できます。これらは、同じ非修飾名を持つクラスに一致します。 修飾されていないクラス名によって選択のあいまいさが発生する場合は、完全修飾クラス名を使用する必要があります。(それは非常にまれです)。 コンストラクタのオーバーロードされた解決は、その機能をアタッチする論理的な場所がないため自動的ではありませんが、言語がこの機能を提供することを希望する場合は、getConstructorMethod(Class, String)
を便利な構成要素として使用できます。
「可変引数呼び出し」は、メソッドとコンストラクタの両方に対して処理されます。
「コーラー・センシティブなメソッド」は、パブリックであり、リンク・リクエストに完全な強さのMethodHandles.Lookup
オブジェクトを持つコール・サイト記述子があり、ルックアップやパブリック・ルックアップが弱まっていないかぎりリンクできます。
「不足しているメンバーを処理するための動作」は、MissingMemberHandlerFactory
をconstructor
に渡すことでカスタマイズできます。
このクラスは、クラスおよびクラス・インスタンスで使用可能なプロパティおよびメソッド名を検出するための様々なメソッド、およびgetLinkerForClass(Class)
メソッドを使用したクラスごとのリンカーへのアクセスも公開します。
-
コンストラクタのサマリー
コンストラクタコンストラクタ説明新しいBeanリンカーを作成します。BeansLinker
(MissingMemberHandlerFactory missingMemberHandlerFactory) 指定されたファクトリを持つ新しいBeanリンカーを作成し、欠落しているメンバー・ハンドラを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明static Object
getConstructorMethod
(Class<?> clazz, String signature) 指定されたクラスのコンストラクタの動的メソッドおよび指定されたシグネチャを返します。getGuardedInvocation
(LinkRequest request, LinkerServices linkerServices) コール・サイトで指定した引数を使用して、特定の呼出しに適したガード付き呼出しを作成します。getInstanceMethodNames
(Class<?> clazz) クラスのすべてのインスタンス・メソッドの名前のセットを返します。getLinkerForClass
(Class<?> clazz) 特定の単一クラスのBeanリンカーを返します。getReadableInstancePropertyNames
(Class<?> clazz) クラスのすべての読取り可能なインスタンス・プロパティの名前のセットを返します。getReadableStaticPropertyNames
(Class<?> clazz) クラスのすべての読取り可能な静的プロパティの名前のセットを返します。getStaticMethodNames
(Class<?> clazz) クラスのすべての静的メソッドの名前のセットを返します。getWritableInstancePropertyNames
(Class<?> clazz) クラスのすべての書込み可能インスタンス・プロパティの名前のセットを返します。getWritableStaticPropertyNames
(Class<?> clazz) クラスのすべての書込み可能な静的プロパティの名前のセットを返します。static boolean
オブジェクトが(getConstructorMethod(Class, String)
を介して取得された)Javaコンストラクタである場合は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) オブジェクトが(getConstructorMethod(Class, String)
を介して取得された)Javaコンストラクタである場合はtrueを返します。- パラメータ:
obj
- Javaコンストラクタとしてテストするオブジェクト。- 戻り値:
- コンストラクタの場合はtrue、それ以外の場合はfalse。
-
getConstructorMethod
指定されたクラスのコンストラクタの動的メソッドおよび指定されたシグネチャを返します。 このメソッドは、明示的なシグネチャに基づいてオーバーロード・コンストラクタを選択する機能を公開する場合に役立ちます。この機能は、StaticClass
オブジェクトが明示的なシグネチャを選択せずにオーバーロード・コンストラクタとして機能するため、Dynalinkでは公開されません。 使用例は:getConstructorMethod(java.awt.Color.class, "int, int, int")
。- パラメータ:
clazz
- クラスsignature
- コンストラクタの完全なシグネチャ。 プリミティブ型の名前、通常のJava表記(e.g."int[]"
)の配列名を使用する方法に注意してください。通常、特定のパラメータ位置で曖昧さが発生しないかぎり、修飾されていないクラス名("java.lang.String, java.util.List"
のかわりに"String, List"
など)を使用することもできます。- 戻り値:
- コンストラクタのdynamicメソッド、または指定されたシグネチャを持つコンストラクタが存在しない場合はnull。
-
getReadableInstancePropertyNames
クラスのすべての読取り可能なインスタンス・プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての読取り可能なインスタンス・プロパティの名前のセット。
-
getWritableInstancePropertyNames
クラスのすべての書込み可能インスタンス・プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての書込み可能インスタンス・プロパティの名前のセット。
-
getInstanceMethodNames
クラスのすべてのインスタンス・メソッドの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべてのインスタンス・メソッドの名前のセット。
-
getReadableStaticPropertyNames
クラスのすべての読取り可能な静的プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての読取り可能な静的プロパティの名前のセット。
-
getWritableStaticPropertyNames
クラスのすべての書込み可能な静的プロパティの名前のセットを返します。- パラメータ:
clazz
- クラス- 戻り値:
- クラスのすべての書込み可能な静的プロパティの名前のセット。
-
getStaticMethodNames
クラスのすべての静的メソッドの名前のセットを返します。- パラメータ:
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
- 何らかの理由で操作が失敗した場合
-