黑马程序员技术交流社区

标题: 创建动态类及查看其方法列表疑问 [打印本页]

作者: 敷衍ゝ微笑掩盖    时间: 2014-7-2 10:24
标题: 创建动态类及查看其方法列表疑问
本帖最后由 敷衍ゝ微笑掩盖 于 2014-7-2 10:27 编辑

Public void abc(){
Class clazzProxy1=Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class );
Constructor[] constructors = clazzProxy1.getConstructors();
For(Constructor constructor:constructors){
String name=constructor.getName();
StringBuilder sBuilder = new StringBuilder(name);
sBuilder.append(“(”);
Class[] clazzParams=constructor.getParameterTypes();
for(Class clazzParam:clazzParams){
sBuilder.append(clazzParam.getName()).get(‘,’);
}
sBuilder.deleteCharAt(sBuilder.length()-1);
sBuilder.append(“)”);
}
}
上面就能指定了一个接口,并没有指明为哪个类的代理啊,它怎么知道为哪个类的代理哟。那个是生成的动态类哟
作者: 那片天空    时间: 2014-7-2 13:40
对于Proxy.getProxyClass是 返回代理类的 java.lang.Class 对象,并向其提供类加载器和接口数组。
而Proxy.newProxyInstance 才是返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
这是视频里实现一个实例类的代理:
Collection collection2 = (Collection) Proxy.newProxyInstance(
              Collection.class.getClassLoader(),
              new Class[] { Collection.class },
              new InvocationHandler() {
                             public Object invoke(Object proxy, Method method,  Object[] args) throws Throwable {
                                    ArrayList arrList = new ArrayList();
                                    long starTime = System.currentTimeMillis();
                                    Object arrListf = method.invoke(arrList, args);
                         System.out.println(method.getName() + "方法的运行时间: " + (System.currentTimeMillis() - starTime));
                      return arrListf;
                    }
           });





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2