本帖最后由 杨增坤 于 2013-9-22 21:08 编辑
在学习动态代理时,遇到一个纠结的问题,用的是张孝祥老师的原代码(老师没测试),写的是动态代理获得的一个小型框架,但在用的时候却爆了异常,请大神指教- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.util.ArrayList;
- public class ProxyTest {
- public static void main(String[] args) {//主函数
- ArrayList arr=new ArrayList();
- MyAdvice ma=new MyAdvice();//此处为加入的系统代码对象
- ArrayList al=(ArrayList)getProxy(arr,ma);<font color="#ff0000">/*此处爆类型异常,所爆异常为java.lang.ClassCastException,
- 以致程序无法执行下去,如果换成Object al=getProxy(arr,ma);又无法调用add()方法,请大神指教
- */</font>
- al.add("455");
- }
- private static Object getProxy(final Object target,final Advice advice){//获得动态代理
- Object proxy1=Proxy.newProxyInstance(
- target.getClass().getClassLoader(),
- target.getClass().getInterfaces(),
- new InvocationHandler(){
- public Object invoke(Object proxy, Method method,
- Object[] args) throws Throwable {
- advice.beginTime();//系统代码调用
- Object retVal=method.invoke(target, args);
- advice.overTime();//系统代码调用
- return retVal;
- }
- });
- return proxy1;
- }
- }
复制代码 所爆异常全称为:Exception in thread "main" java.lang.ClassCastException: $Proxy0
at selfstudy.ProxyTest.main(ProxyTest.java:19),所爆异常处在代码中已经指出,请大神指教
|