El punto del proxy dinámico es que no le importa la clase real del proxy que se está devuelta. Solo le importa que implementa todas las interfaces deseadas y especificadas.
Los javadocs para newProxyInstance
estado:
Devoluciones:
Una instancia proxy con el controlador de invocación especificado de una clase proxy que está definida por el cargador de clase especificado y que implementa las interfaces especificadas
Asi que, newProxyInstance
devolvió una instancia de com.sun.proxy.$Proxy0
(sea lo que sea, realmente no nos importa), pero también se aseguró de que sea un MyServelet
. Deberías poder lanzarlo MyServelet
sin un ClassCastException
, porque newProxyInstance
creó la clase para implementar esa interfaz, y usted especificó que debería pasar new Class[]{MyServelet.class}
.
Para que el tipo de casting no haya fallado, Java Genély debe haber inferido que T
es MyServelet
, no MyServeletImplementation
. Quizás cuando llamaste instrument
, lo hiciste así:
MyServelet proxy = YourClass.instrument(new MyServeletImplementation());
Entonces el elenco era MyServelet
que debería tener éxito y no MyServeletImplementation
, que debería fallar.