当前位置: 移动技术网 > IT编程>开发语言>Java > Java 创建动态类和查看方法列表信息的实例

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

2019年07月22日  | 移动技术网IT编程  | 我要评论
 java 创建动态类和查看方法列表信息的实例 sample code : import java.lang.reflect.constructor;

 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


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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网