这里有新鲜出炉的 Java 并发编程示例,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 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
来源: http://www.phperz.com/article/17/0819/338355.html