동적 프록시의 요점은 반환되는 프록시의 실제 클래스에 신경 쓰지 않는다는 것입니다. 원하는 모든 인터페이스를 구현할 수 있습니다.
Javadocs를위한 newProxyInstance
상태:
보고:
지정된 클래스 로더에 의해 정의되고 지정된 인터페이스를 구현하는 프록시 클래스의 지정된 호출 핸들러가있는 프록시 인스턴스
그래서, newProxyInstance
인스턴스를 반환했습니다 com.sun.proxy.$Proxy0
(그게 든 우리는 정말로 신경 쓰지 않습니다). MyServelet
. 당신은 그것을 캐스팅 할 수 있어야합니다 MyServelet
a ClassCastException
, 왜냐하면 newProxyInstance
해당 인터페이스를 구현하기 위해 클래스를 만들었고, 당신은 그것을 통과함으로써 그것을 지정했습니다. new Class[]{MyServelet.class}
.
유형 캐스팅이 실패하지 않은 경우 Java Generics는 다음을 추론했을 것입니다. T
~이다 MyServelet
, 아니다 MyServeletImplementation
. 아마도 당신이 전화했을 때 instrument
, 당신은 이것을 좋아했습니다 :
MyServelet proxy = YourClass.instrument(new MyServeletImplementation());
그래서 캐스트는 그랬습니다 MyServelet
성공해야합니다 MyServeletImplementation
, 실패해야합니다.