This article mainly introduces relevant information on examples of creating dynamic classes and viewing method list information in Java. Friends in need can refer to
Examples of creating dynamic classes and viewing method list information in 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()); }
Run result:
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:2 collectionProxy2 size:3
The above is the detailed content of Example tutorial on creating dynamic classes in Java. For more information, please follow other related articles on the PHP Chinese website!