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

网友投稿 259 2023-05-08


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

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java 接口的实现方式(java接口中的方法)
下一篇:Java使用条件语句和循环结构确定控制流(实例)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~