A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 零敢 中级黑马   /  2014-1-7 16:41  /  1017 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是网下下载的一个视频教程中的一个例子:jdk的文档看不懂
public interface Subject
{
        public void request();
}

public class RealSubject implements Subject
{
        public void request()
        {
                System.out.println("From real subject");
        }
}

public class DynamicSubject implements InvocationHandler
{
        private Object sub;
        public DynamicSubject(Object sub)
        {
                this.sub = sub;
        }
        public Object invoke(Object proxy, Method method, Object[] args)
                        throws Throwable
        {
                method.invoke(sub,args);
                return null;
        }
}

public class Client
{
        public static void main(String[] args)
        {
                RealSubject realSubject = new RealSubject();
                InvocationHandler handler = new DynamicSubject(realSubject);
                Class<?> classType = handler.getClass();
                Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),
                                realSubject.getClass().getInterfaces(),handler);
                pro.request();
        }
}
我的问题是:Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),realSubject.getClass().getInterfaces(),handler);
这行代码返回的到底是个什么?就是Subject类型?还是强制转换了?为什么执行
pro.request();之后会调用DynamicSubject类里面的那个method.invoke方法Invocation这个接口和Proxy.newProxyInstance这个方法到底怎么理解

1 个回复

倒序浏览
本帖最后由 渐渐不懂了 于 2014-1-9 13:42 编辑

Subject pro = (Subject)Proxy.newProxyInstance(classType.getClassLoader(),realSubject.getClass().getInterfaces(),handler);
classType.getClassLoader()表示用的那个类加载器;realSubject.getClass().getInterfaces()表示实现了那个接口;handler需要接受一个new InvocationHandler();中需要接受三个参数,那个类型.class,那个类型的方法,以及参数并且里面有一个invkoe()方法但你用该方法时它就没人调用invoke()函数;
oxy.newProxyInstance()属于Object类型所以需要强制转换;
希望可你帮到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马