Der Punkt des dynamischen Proxy ist, dass Sie sich nicht um die tatsächliche Klasse des Stellvertreters kümmern, der zurückgegeben wird. Sie kümmern sich nur darum, dass es alle gewünschten und spezifizierten Schnittstellen implementiert.
Die Javadocs für newProxyInstance
Zustand:
Kehrt zurück:
Eine Proxy -Instanz mit dem angegebenen Aufrufhandler einer Proxy -Klasse, die vom angegebenen Klassenlader definiert wird und die angegebenen Schnittstellen implementiert
So, newProxyInstance
zurückgegeben eine Instanz von com.sun.proxy.$Proxy0
(Was auch immer das ist, wir kümmern uns nicht wirklich darum), aber es hat auch dafür gesorgt, dass es ein ist MyServelet
. Sie sollten in der Lage sein, es zu geben MyServelet
ohne ein ClassCastException
, Weil newProxyInstance
Erstellt die Klasse, um diese Schnittstelle zu implementieren new Class[]{MyServelet.class}
.
Damit das Typ Casting nicht gescheitert ist, muss Java Generics das geschmückt haben T
ist MyServelet
, nicht MyServeletImplementation
. Vielleicht, wenn du angerufen hast instrument
, Sie haben es so gemacht:
MyServelet proxy = YourClass.instrument(new MyServeletImplementation());
Also war die Besetzung zu MyServelet
welches erfolgreich sein sollte und nicht zu MyServeletImplementation
, was scheitern sollte.