モジュール 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オブジェクトをStandardOperation.GETおよびStandardOperation.SET操作としてStandardNamespace.ELEMENTネームスペースに公開
  • ListMapオブジェクトの要素の削除をStandardNamespace.ELEMENT名前空間のStandardOperation.REMOVE操作として公開
  • 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オブジェクトを持ち、弱参照やパブリック・ルック・アップを持たないコール・サイト記述子があればリンクできます。

「不足しているメンバーを処理するための動作」は、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)
      オブジェクトが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 - 何らかの理由で操作が失敗した場合