IMy の質問は、動的プロキシと Java ジェネリックを使用した型キャストの動作に関するものです。具体的には、動的プロキシを使用してサーブレット オブジェクトを計測したいと考えています。再利用性を高めるために、プロキシ オブジェクトを作成するための一般的なコード テンプレートを以下のように採用しました。
@SuppressWarnings("unchecked")
public static <T> T instrument(final T aT) {
T proxy = (T) Proxy.newProxyInstance(aT.getClass().getClassLoader(), new Class[]{MyServelet.class}, new InvocationHandler() {
@Override
public Object invoke(Object aProxy, Method aMethod, Object[] aArgs) throws Throwable {
..... instrumentation logic goes here
}
});
System.out.println("proxy class " + proxy.getClass());
System.out.println("input class " + aT.getClass());
return proxy;
}
ここで、T は、MyServelet インターフェイスを実装する具体的なサーブレット実装クラスです。ただし、上記の方法を実行すると、出力されます
proxy class class com.sun.proxy.$Proxy0
input class class MyServeletImplementation
では、コード スニペットの型キャスト ステートメントはどうなったのだろうか。プロキシが MyServeletImplementation にキャストされなかったため、静かに失敗したようですが、ClassCastException もスローしませんでした。誰かがこれについて私に光を当てることができますか? ありがとう!