- すべての実装されたインタフェース:
InvocationHandler
getterメソッドをCompositeData
に転送するInvocationHandler
です。 インタフェースに取得メソッドだけが含まれる場合(String getName()
やboolean isActive()
など)、このクラスをProxy
クラスと組み合わせて使用することで、各取得メソッドがCompositeData
内の対応する項目の値を返すインタフェースの実装を生成できます。
たとえば、次のようなインタフェースを考えましょう。
また、public interface NamedNumber { public int getNumber(); public String getName(); }
CompositeData
は次のように構築されます。
次のようにして、CompositeData cd = newCompositeDataSupport
( 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(CompositeData compositeData)
指定したCompositeData
を利用するハンドラを構築します。 -
メソッドのサマリー
修飾子と型メソッド説明コンストラクタに指定されたCompositeData
を返します。プロキシ・インスタンスでメソッド呼出しを処理し、その結果を返します。
-
コンストラクタの詳細
-
CompositeDataInvocationHandler
public CompositeDataInvocationHandler(CompositeData compositeData)指定した
CompositeData
を利用するハンドラを構築します。- パラメータ:
compositeData
- 取得メソッドに情報を提供するCompositeData
。- 例外:
IllegalArgumentException
-compositeData
がnullである場合。
-
-
メソッドの詳細
-
getCompositeData
public CompositeData getCompositeData()コンストラクタに指定されたCompositeData
を返します。- 戻り値:
- このハンドラが利用する
CompositeData
。 nullは不可。
-
invoke
インタフェースからコピーされた説明:InvocationHandler
プロキシ・インスタンスでメソッド呼出しを処理し、その結果を返します。 関連したプロキシ・インスタンスでメソッドが呼び出されると、このメソッドは呼出しハンドラで呼び出されます。- 定義:
invoke
、インタフェース:InvocationHandler
- パラメータ:
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
-