黑马程序员技术交流社区

标题: Java代理机制创建动态类及查看其方法列表信息 [打印本页]

作者: pzfpang449    时间: 2013-2-5 12:43
标题: Java代理机制创建动态类及查看其方法列表信息
本帖最后由 张向辉 于 2013-2-6 15:24 编辑
  1. package com.pzf;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Proxy;
  5. import java.util.Collection;


  6. /*创建动态类及查看其方法列表信息*/
  7. public class ProxyTest {
  8.         public static void main(String[] args) {
  9.                 Class clazzProxy1= Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);//参数1类加载器,2类的接口(可多个)
  10.                 System.out.println(clazzProxy1.getName());
  11.                 //2,查看类的方法
  12.                 //2.1查看构造方法
  13.                 System.out.println("----构造方法列表----");
  14.                 Constructor[] constructors=clazzProxy1.getConstructors();
  15.                 for(Constructor constructor: constructors){
  16.                         //获得构造方法的名字
  17.                         String name=constructor.getName();
  18.                         StringBuilder sb=new StringBuilder(name);
  19.                         sb.append('(');
  20.                         //查看方法的参数
  21.                         Class[] clazzParames= constructor.getParameterTypes();
  22.                         for(Class clazzParame:clazzParames){
  23.                                 //取出类型名字,并且追加到StringBuilder,并且每个参数用逗号隔开
  24.                                 sb.append(clazzParame.getName()).append(",");
  25.                                 
  26.                         
  27.                         }
  28.                         //去掉最后逗号
  29.                         if(clazzParames!=null&&clazzParames.length!=0)
  30.                                 sb.deleteCharAt(sb.length()-1);
  31.                         sb.append(')');
  32.                         System.out.println(sb.toString());
  33.                 }
  34.                 System.out.println("----方法列表----");
  35.                 Method[] methods=clazzProxy1.getMethods();
  36.                 for(Method method: methods){
  37.                         //获得构造方法的名字
  38.                         String name=method.getName();
  39.                         StringBuilder sb=new StringBuilder(name);
  40.                         sb.append('(');
  41.                         //查看方法的参数
  42.                         Class[] clazzParames= method.getParameterTypes();
  43.                         for(Class clazzParame:clazzParames){
  44.                                 //取出类型名字,并且追加到StringBuilder,并且每个参数用逗号隔开
  45.                                 sb.append(clazzParame.getName()).append(",");
  46.                                 
  47.                         
  48.                         }
  49.                         //去掉最后逗号
  50.                         if(clazzParames!=null&&clazzParames.length!=0)
  51.                                 sb.deleteCharAt(sb.length()-1);
  52.                         sb.append(')');
  53.                         System.out.println(sb.toString());
  54.                 }
  55.         }
  56. }
复制代码
运行结果:
----构造方法列表----
$Proxy0(java.lang.reflect.InvocationHandler)
----方法列表----
add(java.lang.Object)
hashCode()
clear()
equals(java.lang.Object)
toString()
contains(java.lang.Object)
isEmpty()
addAll(java.util.Collection)
iterator()
size()
toArray([Ljava.lang.Object;)
toArray()
remove(java.lang.Object)
containsAll(java.util.Collection)
removeAll(java.util.Collection)
retainAll(java.util.Collection)
isProxyClass(java.lang.Class)
getProxyClass(java.lang.ClassLoader,[Ljava.lang.Class;)
getInvocationHandler(java.lang.Object)
newProxyInstance(java.lang.ClassLoader,[Ljava.lang.Class;,java.lang.reflect.InvocationHandler)
wait()
wait(long,int)
wait(long)
getClass()
notify()
notifyAll()

希望对你理解代理有所帮助




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