首页 > 开发 > Java > 正文

Java 创建动态类和查看方法列表信息的实例

2024-07-13 10:08:46
字体:
来源:转载
供稿:网友

 Java 创建动态类和查看方法列表信息的实例

Sample code :

import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection;  public class ProxyTest {    public static void main(String[] args) throws Exception {     // TODO Auto-generated method stub     Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);     System.out.println(clazzProxy);     System.out.println("------constructor method list ------");     Constructor[] constructors = clazzProxy.getConstructors();     for(Constructor constructor:constructors){       StringBuilder sb = new StringBuilder(constructor.getName());       sb.append("(");       Type[] parameterTypes = constructor.getParameterTypes();       for(Type parameterType:parameterTypes){         sb.append(parameterType.toString()+",");       }       if(parameterTypes.length>0){         sb.deleteCharAt(sb.length()-1);       }       sb.append(")");       System.out.println(sb.toString());            }     System.out.println("------constructor method list ------/n/n");          System.out.println("------ method list ------");     Method[] methods = clazzProxy.getMethods();     for(Method method:methods){       StringBuilder sb2 = new StringBuilder(method.getName());       sb2.append("(");       Type[] parameterTypes = method.getParameterTypes();       for(Type parameterType:parameterTypes){         sb2.append(parameterType.toString()+",");       }       if(parameterTypes.length>0){         sb2.deleteCharAt(sb2.length()-1);       }       sb2.append(")");       System.out.println(sb2.toString());            }     System.out.println("------ method list ------");          Constructor proxyConstructor = clazzProxy.getConstructor(InvocationHandler.class);     class MyInvocationHandler implements InvocationHandler{       ArrayList target = new ArrayList();       public Object invoke(Object proxy, Method method, Object[] args)           throws Throwable {         Object obj = method.invoke(target, args);         return obj;       }            }     MyInvocationHandler mih = new MyInvocationHandler();     Collection collectionProxy = (Collection) proxyConstructor.newInstance(mih);     collectionProxy.add("zhuang");     collectionProxy.add("alex");     System.out.println("collectionProxy size:"+collectionProxy.size());          Collection collectionProxy2 = (Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(),new Class[] {Collection.class},new InvocationHandler(){       ArrayList target = new ArrayList();       public Object invoke(Object proxy, Method method, Object[] args)           throws Throwable {         Object obj = method.invoke(target, args);         return obj;       }     });          collectionProxy2.add("one");     collectionProxy2.add("two");     collectionProxy2.add("three");     System.out.println("collectionProxy2 size:"+collectionProxy2.size());   } 

运行结果:

class $Proxy0------constructor method list ------$Proxy0(interface Java.lang.reflect.InvocationHandler)------constructor method list ------------ method list ------add(class java.lang.Object)hashCode()equals(class java.lang.Object)clear()toString()contains(class java.lang.Object)isEmpty()addAll(interface java.util.Collection)iterator()size()toArray(class [Ljava.lang.Object;)toArray()remove(class java.lang.Object)containsAll(interface java.util.Collection)removeAll(interface java.util.Collection)retainAll(interface java.util.Collection)isProxyClass(class java.lang.Class)getProxyClass(class java.lang.ClassLoader,class [Ljava.lang.Class;)newProxyInstance(class java.lang.ClassLoader,class [Ljava.lang.Class;,interface java.lang.reflect.InvocationHandler)getInvocationHandler(class java.lang.Object)wait()wait(long,int)wait(long)getClass()notify()notifyAll()------ method list ------collectionProxy size:2collectionProxy2 size:3

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表