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:2
collectionProxy2 size:3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值