O objetivo do proxy dinâmico é que você não se importa com a classe real do proxy que está sendo devolvido. Você apenas se importa que ele implemente todas as interfaces desejadas e especificadas.
Os javadocs para newProxyInstance
Estado:
Retornos:
Uma instância de proxy com o manipulador de invocação especificado de uma classe de proxy que é definida pelo carregador de classe especificado e que implementa as interfaces especificadas
Então, newProxyInstance
devolveu uma instância de com.sun.proxy.$Proxy0
(seja o que for, nós realmente não nos importamos), mas também garantiu que seja um MyServelet
. Você deve ser capaz de lançá -lo para MyServelet
sem a ClassCastException
, Porque newProxyInstance
criou a classe para implementar essa interface e você especificou que deveria passar new Class[]{MyServelet.class}
.
Para que o elenco de tipo não tenha falhado, os genéricos de Java devem ter deduzido que T
é MyServelet
, não MyServeletImplementation
. Talvez quando você ligou instrument
, você fez isso assim:
MyServelet proxy = YourClass.instrument(new MyServeletImplementation());
Então o elenco era para MyServelet
o que deve ter sucesso, e não MyServeletImplementation
, que deve falhar.