動的プロキシのポイントは、返されているプロキシの実際のクラスを気にしないことです。あなたはそれが望ましいすべての指定されたインターフェイスを実装することを気にします。
Javadocsの newProxyInstance
州:
戻り値:
指定されたクラスローダーによって定義され、指定されたインターフェイスを実装するプロキシクラスの指定された呼び出しハンドラーを備えたプロキシインスタンス
そう、 newProxyInstance
のインスタンスを返しました com.sun.proxy.$Proxy0
(それが何であれ、私たちは本当に気にしません)、それはそれが MyServelet
. 。キャストできるはずです MyServelet
なしで ClassCastException
, 、 なぜなら newProxyInstance
そのインターフェイスを実装するためにクラスを作成し、渡すことでそれが必要であることを指定しました new Class[]{MyServelet.class}
.
失敗しなかったタイプキャストのために、Javaジェネリックはそれを推測したに違いありません T
は MyServelet
, 、 いいえ MyServeletImplementation
. 。おそらくあなたが電話したとき instrument
, 、あなたはこのようにそうしました:
MyServelet proxy = YourClass.instrument(new MyServeletImplementation());
だからキャストはそうでした MyServelet
成功するはずであり、そうではありません MyServeletImplementation
, 、失敗するはずです。