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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /**

  2.          * 练习使用代理,添加功能

  3.          * @param args

  4.          */

  5.         public static void main(String[] args) {

  6.                 // TODO Auto-generated method stub

  7.                 HashSet has =(HashSet)Proxy.newProxyInstance(

  8.                                 //这一步是告诉proxy用哪个类加载器加载这个类

  9.                                 HashSet.class.getClassLoader(),
  10.                                 //这一步是为了告诉动态生成类的proxy,要生成什么样的类

  11.                                 new Class[]{HashSet.class},
  12.                                 //这个参数是代理的关键参数,这个参数的作用是对要代理的方法进行操作

  13.                                 new InvocationHandler() {

  14.                                         HashSet set = new HashSet();

  15.                                         @Override

  16.                                         public Object invoke(Object proxy, Method method, Object[] args)

  17.                                                         throws Throwable {

  18.                                                 // TODO Auto-generated method stub

  19.                                         Object retVal = method.invoke(set, args);

  20.                                                 return retVal;

  21.                                         }

  22.                                 }

  23.                                 );

  24.                 //has.hashCode();

  25.                 has.add("hllo");

  26.                
  27.         }
复制代码

2 个回复

倒序浏览
要代理的目标类不一定是接口吧
newProxyInstance(Target.class.getClassLoader(),Target.class.getInterfaces(),handler);
回复 使用道具 举报
这么说吧,代理要为目标增加功能,那么增加功能的方法通过代理传递给目标,所以目标有的方法代理也必须有,
所以要实现相同的接口啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马