黑马程序员技术交流社区
标题:
为什么Proxy动态生成的类只能是接口的类
[打印本页]
作者:
金龙
时间:
2012-7-30 17:07
标题:
为什么Proxy动态生成的类只能是接口的类
/**
* 练习使用代理,添加功能
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet has =(HashSet)Proxy.newProxyInstance(
//这一步是告诉proxy用哪个类加载器加载这个类
HashSet.class.getClassLoader(),
//这一步是为了告诉动态生成类的proxy,要生成什么样的类
new Class[]{HashSet.class},
//这个参数是代理的关键参数,这个参数的作用是对要代理的方法进行操作
new InvocationHandler() {
HashSet set = new HashSet();
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
Object retVal = method.invoke(set, args);
return retVal;
}
}
);
//has.hashCode();
has.add("hllo");
}
复制代码
作者:
陈红建
时间:
2012-7-30 18:04
因为 Proxy 的newInstance 的一个参数就是指定一个接口。是handelr那个参数。必须是一个接口。因为是代理嘛。。你不能做厂家的事情。你要能做厂家的事情,就不用做代理了。
作者:
杨志
时间:
2012-7-30 23:17
代理嘛!简单的说就是,叫个别人去帮你做事!
那么肯定就要去实现相同的接口。不然他怎么知道帮做什么事情呢!
那么实现相同的接口。就是说,代理类和被代理类就是兄弟的关系。
既然是兄弟关系,那肯定就是不能互转换的。
但是根据多态的思想,子类是可以赋值给父类或者父接口的。
附上一张张老师讲的图!
3333.jpg
(33.71 KB, 下载次数: 9)
下载附件
2012-7-30 23:16 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2