Maison > Java > javaDidacticiel > Exemple de tutoriel sur la création de classes dynamiques en Java

Exemple de tutoriel sur la création de classes dynamiques en Java

零下一度
Libérer: 2017-06-17 13:09:49
original
1393 Les gens l'ont consulté

Cet article présente principalement des informations pertinentes sur des exemples de création de classes dynamiques et d'affichage des informations de liste de méthodes en Java. Les amis dans le besoin peuvent se référer à

Exemples de création de classes dynamiques et d'affichage d'informations de liste de méthodes en Java.

Exemple de 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()); 
  }
Copier après la connexion

Résultat de l'exécution :

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
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal