クラスCompositeDataInvocationHandler
- すべての実装されたインタフェース:
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(CompositeData compositeData) 指定したCompositeDataを利用するハンドラを構築します。 -
メソッドのサマリー
修飾子と型メソッド説明コンストラクタに指定されたCompositeDataを返します。プロキシ・インスタンスでメソッド呼出しを処理し、その結果を返します。クラスオブジェクトで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait修飾子と型メソッド説明protected Objectclone()このオブジェクトのコピーを作成して、返します。booleanこのオブジェクトと他のオブジェクトが等しいかどうかを示します。protected voidfinalize()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。最終決定は非推奨であり、将来のリリースで削除される可能性があります。final Class<?> getClass()このObjectの実行時クラスを返します。inthashCode()このオブジェクトに対するハッシュ・コード値を返します。final voidnotify()このオブジェクトのモニターで待機中のスレッドを1つ再開します。final voidこのオブジェクトのモニターで待機中のすべてのスレッドを再開します。toString()オブジェクトの文字列表現を返します。final voidwait()現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。final voidwait(long timeoutMillis) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。final voidwait(long timeoutMillis, int nanos) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
-
コンストラクタの詳細
-
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オブジェクトの宣言クラスは、プロキシ・インタフェース、そのスーパーインタフェースの1つ、またはObjectクラスです。args- プロキシ・インスタンスでのメソッド呼出しで渡された引数の値を含むオブジェクトの配列。または、呼び出されたメソッドが引数をとらない場合はnull。 プリミティブ型の引数は、java.lang.Integerやjava.lang.Booleanなどの適切なプリミティブ・ラッパー・クラスのインスタンスにラップされる。- 戻り値:
- プロキシ・インスタンスでのメソッド呼出しからの戻り値。 起動されたメソッドの宣言された戻り型がプリミティブ型の場合、このメソッドによって返される値は、対応するプリミティブ・ラッパー・クラスのインスタンスである必要があります。そうでない場合は、宣言された戻り型に割り当てることができる型である必要があります。 このメソッドによって戻される値が
nullで、呼び出されたメソッドの戻り型がプリミティブである場合、プロキシ・インスタンスでのメソッド呼出しによってNullPointerExceptionがスローされます。 このメソッドから戻された値に、前述のように呼び出されたメソッドの宣言された戻り型との互換性がない場合、プロキシ・インスタンスでのメソッド呼出しによってClassCastExceptionがスローされます。 - スロー:
Throwable- プロキシ・インスタンスでのメソッド呼び出しからスローされる例外。 例外のタイプは、呼び出されたメソッドのthrows句で宣言された例外タイプ、またはチェックされていない例外タイプjava.lang.RuntimeExceptionまたはjava.lang.Errorのいずれかに割当て可能である必要があります。 呼び出されたメソッドのthrows句で宣言された例外タイプに割り当てられない例外がこのメソッドによってスローされた場合、このメソッドによってスローされた例外を含むUndeclaredThrowableExceptionは、プロキシ・インスタンスでのメソッド呼出しによってスローされます。- 関連項目:
-