Il punto del proxy dinamico è che non ti interessa la classe effettiva del proxy che viene restituito. Ti interessa solo che implementa tutte le interfacce desiderate e specificate.
I Javadocs per newProxyInstance
stato:
Ritorna:
un'istanza proxy con il gestore di invocazione specificato di una classe proxy definita dal caricatore di classe specificato e che implementa le interfacce specificate
Così, newProxyInstance
restituito un'istanza di com.sun.proxy.$Proxy0
(Qualunque cosa sia, non ci interessa davvero), ma si è anche assicurato che fosse un MyServelet
. Dovresti essere in grado di lanciarlo MyServelet
senza un ClassCastException
, perché newProxyInstance
ha creato la classe per implementare tale interfaccia e hai specificato che dovrebbe passare new Class[]{MyServelet.class}
.
Affinché il casting non abbia fallito, Java generici deve averlo dedotto T
è MyServelet
, non MyServeletImplementation
. Forse quando hai chiamato instrument
, lo faceva così:
MyServelet proxy = YourClass.instrument(new MyServeletImplementation());
Quindi il cast doveva MyServelet
che dovrebbe avere successo e non farlo MyServeletImplementation
, che dovrebbe fallire.