JavaTM Platform
Standard Ed. 6

javax.management.openmbean
クラス CompositeDataInvocationHandler

java.lang.Object
  上位を拡張 javax.management.openmbean.CompositeDataInvocationHandler
すべての実装されたインタフェース:
InvocationHandler

public class CompositeDataInvocationHandler
extends Object
implements InvocationHandler

取得メソッドを 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 がこのオブジェクトの CompositeData と等しい (同一である必要はない) 場合だけです。invoke に渡されるメソッドが、Object から継承される int hashCode() メソッドである場合、この equals の定義と一致する値が返されます。equals に従って 2 つのオブジェクトが等しい場合、どちらも同じ hashCode を持ちます。

導入されたバージョン:
1.6

コンストラクタの概要
CompositeDataInvocationHandler(CompositeData compositeData)
          指定した CompositeData を利用するハンドラを構築します。
 
メソッドの概要
 CompositeData getCompositeData()
          コンストラクタに指定された CompositeData を返します。
 Object invoke(Object proxy, Method method, Object[] args)
          プロキシインスタンスでメソッド呼び出しを処理し、その結果を返します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

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 の記述:
プロキシインスタンスでメソッド呼び出しを処理し、その結果を返します。関連したプロキシインスタンスでメソッドが呼び出されると、このメソッドは呼び出しハンドラで呼び出されます。

定義:
インタフェース InvocationHandler 内の invoke
パラメータ:
proxy - メソッドが呼び出されるプロキシインスタンス
method - プロキシインスタンスで呼び出されるインタフェースメソッドに対応する Method インスタンス。 Method オブジェクトの宣言クラスは、このメソッドが宣言されたインタフェースであり、プロキシクラスがメソッドを継承するプロキシインタフェースのスーパーインタフェースのこともある
args - プロキシインスタンスでのメソッド呼び出し時に渡される引数値を格納するオブジェクト配列。インタフェースメソッドが引数をとらない場合、null となる。 プリミティブ型引数は java.lang.Integer または java.lang.Boolean のような適切なプリミティブ型ラッパークラスのインスタンスにラップされる
戻り値:
プロキシインスタンスでのメソッド呼び出しからの戻り値。 インタフェースメソッドの宣言された戻り値の型がプリミティブ型の場合は、このメソッドの戻り値は対応するプリミティブラッパークラスのインスタンスでなければならない。そうでない場合、宣言された戻り値の型に割り当てられる型でなければならない。このメソッドによる戻り値が null で、インタフェースメソッドの戻り値がプリミティブ型の場合、プロキシインスタンスでのメソッド呼び出しによって NullPointerException がスローされる。 これ以外のケースで、このメソッドの戻り値と上記のようなインタフェースメソッドの宣言された戻り値の型との間に互換性がない場合、ClassCastException はプロキシインスタンスでのメソッド呼び出しによってスローされることになる
例外:
Throwable - プロキシインスタンスでのメソッド呼び出しからスローされる例外。 この例外のタイプは、インタフェースメソッドの throws 節に宣言される例外タイプか、または、チェックされない例外タイプの java.lang.RuntimeException または java.lang.Error に割り当てられなければならない。 このメソッドによってスローされるチェック例外が、インタフェースメソッドの throws 節に宣言された例外タイプに割り当てられない場合、このメソッドがスローした例外を格納する UndeclaredThrowableException がプロキシインスタンスでのメソッド呼び出しによってスローされることになる
関連項目:
UndeclaredThrowableException

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。