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, 2013, Oracle and/or its affiliates. All rights reserved.