0

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 もスローしませんでした。誰かがこれについて私に光を当てることができますか? ありがとう!

4

3 に答える 3