モジュール jdk.dynalink
パッケージ jdk.dynalink.beans

クラスBeansLinker

java.lang.Object
jdk.dynalink.beans.BeansLinker
すべての実装されたインタフェース:
GuardingDynamicLinker

public class BeansLinker extends Object implements GuardingDynamicLinker
通常のJavaオブジェクトのリンカー。 通常、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操作として公開
  • ListMapオブジェクトの要素の削除を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オブジェクトを持つコール・サイト記述子があり、ルックアップやパブリック・ルックアップが弱まっていないかぎりリンクできます。

「不足しているメンバーを処理するための動作」は、MissingMemberHandlerFactoryconstructorに渡すことでカスタマイズできます。

このクラスは、クラスおよびクラス・インスタンスで使用可能なプロパティおよびメソッド名を検出するための様々なメソッド、およびgetLinkerForClass(Class)メソッドを使用したクラスごとのリンカーへのアクセスも公開します。

  • コンストラクタの詳細

    • 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

      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"など)を使用することもできます。
      戻り値:
      コンストラクタのdynamicメソッド、または指定されたシグネチャを持つコンストラクタが存在しない場合は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 - 何らかの理由で操作が失敗した場合