Le point du proxy dynamique est que vous ne vous souciez pas de la classe réelle du proxy qui est retourné. Vous vous souciez simplement qu'il implémente toutes les interfaces souhaitées et spécifiées.
Les javadocs pour newProxyInstance
Etat:
Retour:
une instance proxy avec le gestionnaire d'invocation spécifié d'une classe proxy définie par le chargeur de classe spécifié et qui implémente les interfaces spécifiées
Alors, newProxyInstance
retourné une instance de com.sun.proxy.$Proxy0
(Quoi que ce soit, nous ne nous en soucions pas vraiment), mais cela s'est également assuré que ce soit un MyServelet
. Vous devriez pouvoir le lancer MyServelet
sans un ClassCastException
, car newProxyInstance
a créé la classe pour implémenter cette interface, et vous avez spécifié qu'il devrait en transmettre new Class[]{MyServelet.class}
.
Pour que le casting de type n'ait pas échoué, les génériques Java doivent avoir déduit que T
est MyServelet
, ne pas MyServeletImplementation
. Peut-être que quand tu as appelé instrument
, vous l'avez fait comme ceci:
MyServelet proxy = YourClass.instrument(new MyServeletImplementation());
Alors le casting était de MyServelet
qui devrait réussir, et non MyServeletImplementation
, qui devrait échouer.