Java 创建动态类和查看方法列表信息的实例
Java创建动态类和查看方法列表信息的实例
Samplecode:
importjava.lang.reflect.Constructor; importjava.lang.reflect.InvocationHandler; importjava.lang.reflect.Method; importjava.lang.reflect.Proxy; importjava.lang.reflect.Type; importjava.util.ArrayList; importjava.util.Collection; publicclassProxyTest{ publicstaticvoidmain(String[]args)throwsException{ //TODOAuto-generatedmethodstub ClassclazzProxy=Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class); System.out.println(clazzProxy); System.out.println("------constructormethodlist------"); Constructor[]constructors=clazzProxy.getConstructors(); for(Constructorconstructor:constructors){ StringBuildersb=newStringBuilder(constructor.getName()); sb.append("("); Type[]parameterTypes=constructor.getParameterTypes(); for(TypeparameterType:parameterTypes){ sb.append(parameterType.toString()+","); } if(parameterTypes.length>0){ sb.deleteCharAt(sb.length()-1); } sb.append(")"); System.out.println(sb.toString()); } System.out.println("------constructormethodlist------\n\n"); System.out.println("------methodlist------"); Method[]methods=clazzProxy.getMethods(); for(Methodmethod:methods){ StringBuildersb2=newStringBuilder(method.getName()); sb2.append("("); Type[]parameterTypes=method.getParameterTypes(); for(TypeparameterType:parameterTypes){ sb2.append(parameterType.toString()+","); } if(parameterTypes.length>0){ sb2.deleteCharAt(sb2.length()-1); } sb2.append(")"); System.out.println(sb2.toString()); } System.out.println("------methodlist------"); ConstructorproxyConstructor=clazzProxy.getConstructor(InvocationHandler.class); classMyInvocationHandlerimplementsInvocationHandler{ ArrayListtarget=newArrayList(); publicObjectinvoke(Objectproxy,Methodmethod,Object[]args) throwsThrowable{ Objectobj=method.invoke(target,args); returnobj; } } MyInvocationHandlermih=newMyInvocationHandler(); CollectioncollectionProxy=(Collection)proxyConstructor.newInstance(mih); collectionProxy.add("zhuang"); collectionProxy.add("alex"); System.out.println("collectionProxysize:"+collectionProxy.size()); CollectioncollectionProxy2=(Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(),newClass[]{Collection.class},newInvocationHandler(){ ArrayListtarget=newArrayList(); publicObjectinvoke(Objectproxy,Methodmethod,Object[]args) throwsThrowable{ Objectobj=method.invoke(target,args); returnobj; } }); collectionProxy2.add("one"); collectionProxy2.add("two"); collectionProxy2.add("three"); System.out.println("collectionProxy2size:"+collectionProxy2.size()); }
运行结果:
class$Proxy0 ------constructormethodlist------ $Proxy0(interfaceJava.lang.reflect.InvocationHandler) ------constructormethodlist------ ------methodlist------ add(classjava.lang.Object) hashCode() equals(classjava.lang.Object) clear() toString() contains(classjava.lang.Object) isEmpty() addAll(interfacejava.util.Collection) iterator() size() toArray(class[Ljava.lang.Object;) toArray() remove(classjava.lang.Object) containsAll(interfacejava.util.Collection) removeAll(interfacejava.util.Collection) retainAll(interfacejava.util.Collection) isProxyClass(classjava.lang.Class) getProxyClass(classjava.lang.ClassLoader,class[Ljava.lang.Class;) newProxyInstance(classjava.lang.ClassLoader,class[Ljava.lang.Class;,interfacejava.lang.reflect.InvocationHandler) getInvocationHandler(classjava.lang.Object) wait() wait(long,int) wait(long) getClass() notify() notifyAll() ------methodlist------ collectionProxysize:2 collectionProxy2size:3
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!