モジュール java.management

クラスCompositeDataInvocationHandler

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


    public class CompositeDataInvocationHandler
    extends Object
    implements InvocationHandler

    getterメソッドをCompositeDataに転送するInvocationHandlerです。 インタフェースに取得メソッドだけが含まれる場合(String getName()boolean isActive()など)、このクラスをProxyクラスと組み合わせて使用することで、各取得メソッドがCompositeData内の対応する項目の値を返すインタフェースの実装を生成できます。

    たとえば、次のようなインタフェースを考えましょう。

       public interface NamedNumber {
           public int getNumber();
           public String getName();
       }
       
    また、CompositeDataは次のように構築されます。
       CompositeData cd =
           new CompositeDataSupport(
               someCompositeType,
               new String[] {"number", "name"},
               new Object[] {5, "five"}
           );
       
    次のようにして、NamedNumberを実装し、オブジェクトcdを利用するオブジェクトを構築できます。
       InvocationHandler handler =
           new CompositeDataInvocationHandler(cd);
       NamedNumber nn = (NamedNumber)
           Proxy.newProxyInstance(NamedNumber.class.getClassLoader(),
                                  new Class[] {NamedNumber.class},
                                  handler);
       
    nn.getNumber()の呼出しにより、5が返されます。

    取得メソッドで定義されたプロパティの最初の文字が大文字の場合、このハンドラは最初にCompositeData内で大文字で始まる項目を検索します。見つからない場合、対応する小文字またはコード・ポイントで始まる項目を検索します。 getNumber()という名前の取得メソッドの場合、ハンドラは最初にNumberという名前の項目を検索し、次にnumberを検索します。 取得メソッドの名前がgetnumber()である場合、その項目名はnumberである必要があります。

    invokeに渡されるメソッドが、Objectから継承されたboolean equals(Object)メソッドである場合、これがtrueを返すのは、引数がProxyで、そのInvocationHandler CompositeDataInvocationHandlerでもあり、補助 CompositeDataがこのオブジェクトのものと等しい(同一である必要はない)場合のみです。 invokeに与えられたメソッドが、Objectから継承されたメソッドint hashCode()である場合、 equalsのこの定義と一致する値を返します: 2つのオブジェクトがequalsに従って等しい場合、それらは同じhashCodeを持ちます。

    導入されたバージョン:
    1.6
    • コンストラクタの詳細

      • CompositeDataInvocationHandler

        public CompositeDataInvocationHandler​(CompositeData compositeData)

        指定した CompositeDataを利用するハンドラを構築します。

        パラメータ:
        compositeData - 取得メソッドに情報を提供するCompositeData
        例外:
        IllegalArgumentException - compositeDataがnullである場合。
    • メソッドの詳細

      • getCompositeData

        public CompositeData getCompositeData​()
        コンストラクタに指定されたCompositeDataを返します。
        戻り値:
        このハンドラが利用するCompositeData nullは不可。
      • invoke

        public Object invoke​(Object proxy,
                             Method method,
                             Object[] args)
                      throws Throwable
        インタフェースからコピーされた説明: InvocationHandler
        プロキシ・インスタンスでメソッド呼出しを処理し、その結果を返します。 関連したプロキシ・インスタンスでメソッドが呼び出されると、このメソッドは呼出しハンドラで呼び出されます。
        定義:
        invoke、インタフェース: InvocationHandler
        パラメータ:
        proxy - メソッドが呼び出されるプロキシ・インスタンス
        method - プロキシ・インスタンスで呼び出されたインタフェース・メソッドに対応するMethodインスタンス。 Methodオブジェクトの宣言クラスは、このメソッドが宣言されたインタフェースになる。プロキシ・クラスがメソッドを継承するプロキシ・インタフェースのスーパー・インタフェースのこともある。
        args - プロキシ・インスタンスでのメソッド呼出し時に渡される引数値を格納するオブジェクト配列。インタフェース・メソッドが引数を取らない場合はnull プリミティブ型の引数は、java.lang.Integerjava.lang.Booleanなどの適切なプリミティブ・ラッパー・クラスのインスタンスにラップされる。
        戻り値:
        プロキシ・インスタンスでのメソッド呼出しからの戻り値。 インタフェース・メソッドの宣言された戻り値の型がプリミティブ型の場合、このメソッドの戻り値は対応するプリミティブ・ラッパー・クラスのインスタンスである必要がある。それ以外の場合は、宣言された戻り値の型に割当て可能な型である必要がある。 このメソッドの戻り値がnullで、インタフェース・メソッドの戻り値がプリミティブ型の場合、NullPointerExceptionがプロキシ・インスタンスでのメソッド呼出しによってスローされる。 これ以外のケースで、このメソッドの戻り値と前述のようなインタフェース・メソッドの宣言された戻り値の型との間に互換性がない場合、ClassCastExceptionがプロキシ・インスタンスでのメソッド呼出しによってスローされる。
        例外:
        Throwable - プロキシ・インスタンスでのメソッド呼び出しからスローされる例外。 この例外のタイプは、インタフェース・メソッドのthrows節に宣言される例外タイプか、または、非チェック例外タイプのjava.lang.RuntimeExceptionまたはjava.lang.Errorに割り当てられなければならない。 このメソッドによってスローされるチェック例外が、インタフェース・メソッドのthrows節に宣言された例外タイプに割り当てられない場合、このメソッドがスローした例外を格納するUndeclaredThrowableExceptionがプロキシ・インスタンスでのメソッド呼出しによってスローされることになる。
        関連項目:
        UndeclaredThrowableException