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の定義と一致する値が返されます。equalsに従って2つのオブジェクトが等しい場合、どちらも同じhashCodeを持ちます。
| コンストラクタ | 説明 |
|---|---|
CompositeDataInvocationHandler(CompositeData compositeData) |
指定した
CompositeDataを利用するハンドラを構築します。 |
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
CompositeData |
getCompositeData() |
コンストラクタに指定された
CompositeDataを返します。 |
Object |
invoke(Object proxy, Method method, Object[] args) |
プロキシ・インスタンスでメソッド呼出しを処理し、その結果を返します。
|
public CompositeDataInvocationHandler(CompositeData compositeData)
指定したCompositeDataを利用するハンドラを構築します。
compositeData - 取得メソッドに情報を提供するCompositeData。IllegalArgumentException - compositeDataがnullである場合。public CompositeData getCompositeData()
CompositeDataを返します。CompositeData。 nullは不可。 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
InvocationHandlerinvoke、インタフェースInvocationHandlerproxy - メソッドが呼び出されるプロキシ・インスタンス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 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。