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

クラスBeansLinker

  • すべての実装されたインタフェース:
    GuardingDynamicLinker

    public class BeansLinker
    extends Object
    implements GuardingDynamicLinker
    通常のJavaオブジェクトのリンカー。 通常は、DynamicLinkerFactoryによって最終的なフォールバックリンカーとして使用されるため、ほかのリンカーが認識しなかったすべてのオブジェクトに呼び出しをリンクできます。 具体的には、このリンカーは次のようになります。
    • setXxx()getXxx()およびisXxx()形式のすべてのパブリック・メソッドを、StandardNamespace.PROPERTYネームスペースのStandardOperation.SETおよびStandardOperation.GET操作のプロパティ・セッターおよびゲッターとして公開します。
    • StandardNamespace.METHODネームスペースでStandardOperation.GET操作を取得するためのすべてのパブリック・メソッドを公開します。このように取得されたメソッドは、StandardOperation.CALLを使用して起動できます。
    • 同じ名前のプロパティのgetterまたはsetterがないかぎり、すべてのパブリック・フィールドをプロパティとして公開します。
    • ネイティブJava配列、ListおよびMapオブジェクトの要素を、StandardNamespace.ELEMENTネームスペースのStandardOperation.GETおよびStandardOperation.SET操作として公開します。
    • ListおよびMapオブジェクトの要素の削除を、StandardNamespace.ELEMENTネームスペースのStandardOperation.REMOVE操作として公開します。
    • Java配列、CollectionおよびMapオブジェクトにlengthという名前の仮想プロパティを公開します。
    • StaticClassのインスタンスに対するStandardOperation.NEWを、Java配列を表す静的クラス・オブジェクトを含むコンストラクタへのコールとして公開します(コンストラクタは、作成する配列の長さを表す単一の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)
        指定されたクラスのコンストラクタの動的メソッドと指定されたシグネチャを返します。 このメソッドは、明示的なシグネチャに基づいてオーバーロードされたコンストラクタを選択する機能を公開する場合に役立ちます。この機能は、明示的にシグネチャを選択せずにオーバーロードされたコンストラクタとして機能するため、Dynalinkによって公開されることはありません。StaticClassオブジェクト 使用例: getConstructorMethod(java.awt.Color.class, "int, int, int")
        パラメータ:
        clazz - クラス
        signature - コンストラクタの完全なシグネチャ。 プリミティブ型の名前、通常のJava表記("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 - クラス
        戻り値:
        クラスのすべての静的メソッドの名前のセット。