您的位置:首页 > 编程语言 > Java开发

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

2011-12-14 21:00 381 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐