论坛首页 Java企业应用论坛

java 动态代理的一点迷惑

浏览 2692 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-25  
package proxydemo;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

import com.langsin.dynamicproxy.DynamicSubject;
import com.langsin.dynamicproxy.RealSubject;
import com.langsin.dynamicproxy.Subject;

public class Client1 {

    public static void main(String[] args) {

        DisplayServiceImpl obj = new DisplayServiceImpl();
        InvocationHandler target = new DynamicDisplayService(obj);

        Class cls = obj.getClass();//为什么只能转出来接口
        //DisplayServiceImpl ds = (DisplayServiceImpl) 向下转型不成功这样的时候会报异常???为什么
        DisplayService ds = (DisplayService) Proxy.newProxyInstance(cls.getClassLoader(), cls
                .getInterfaces(), target);
        System.out.println(ds.show("helloddddd"));
        //aa.show("hello");
    //    System.out.println(aa.getClass().get);
            
    }

}

在 得到一个动态代理的实例,既然是返回一个实现了这个接口的实例,那么在这里将他转向下转型成DisplayServiceImpl的时候为什么会报java.lang.ClassCastException:异常,百思不得其解,请求给予解释
   发表时间:2007-09-25  
郁闷,第一次提交失败,要重写.

LZ没有搞清楚继承和组合的关系?还是没有搞清楚什么是代理模式?

interface C{
...
}

class A implments C{
...
}

class ProxyA implments C{
private A a;
...
}


现在你获得了一个ProxyA的实例,你把它转换成A?结果自然是异常.

动态代理也是这个基础
0 请登录后投票
   发表时间:2007-09-25  
realreal2000  真是一言惊醒梦中人啊 。。。。
谢啦
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics