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
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!