zoukankan      html  css  js  c++  java
  • 50_创建动态类及查看其方法列表信息

    package com.itcast.day3;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.Collection;
    
    public class ProxyTest {
        public static void main(String[] args)throws Exception {
            Class clazzProxy1=Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
            System.out.println(clazzProxy1.getName());//com.sun.proxy.$Proxy0
            
            
            /****打印动态生成的代理类的构造器列表*****/
            /**
             * $Proxy0()
             * $Proxy0(InvoketionHandler)
             */
            System.out.println("--------begin constructors list----------");
            Constructor[] constructors=clazzProxy1.getConstructors();
            for(Constructor constructor:constructors){
                String name=constructor.getName();
                StringBuilder sb=new StringBuilder(name);
                sb.append("(");
                Class[] clazzParams=constructor.getParameterTypes();
                for(Class clazz:clazzParams){
                    sb.append(clazz.getName());
                    sb.append(',');
                }
                if(clazzParams!=null&&clazzParams.length!=0)
                sb.deleteCharAt(sb.length()-1);
                sb.append(")");
                System.out.println(sb);
            }
            /**只有一个有参数的构造器
              --------begin constructors list----------
              com.sun.proxy.$Proxy0(java.lang.reflect.InvocationHandler)
             */
            
            
            
            /****打印动态生成的代理类的方法列表*****/
            System.out.println("--------begin methods list----------");
            Method[] methods=clazzProxy1.getMethods();
            for(Method method:methods){
                String name=method.getName();
                StringBuilder sb=new StringBuilder(name);
                sb.append("(");
                Class[] clazzParams=method.getParameterTypes();
                for(Class clazz:clazzParams){
                    sb.append(clazz.getName());
                    sb.append(',');
                }
                if(clazzParams!=null&&clazzParams.length!=0)
                sb.deleteCharAt(sb.length()-1);
                sb.append(")");
                System.out.println(sb);
            }
            
            /**
             * 都是Collection和Object里的方法
             * --------begin methods list----------
            add(java.lang.Object)
            equals(java.lang.Object)  这三个派发给InvocationHandler,而其他方法如getClass()由Proxy自己实现
            toString()
            hashCode()
            clear()
            contains(java.lang.Object)
            isEmpty()
            addAll(java.util.Collection)
            iterator()
            size()
            toArray([Ljava.lang.Object;)
            toArray()
            remove(java.lang.Object)
            containsAll(java.util.Collection)
            removeAll(java.util.Collection)
            retainAll(java.util.Collection)
            isProxyClass(java.lang.Class)
            getProxyClass(java.lang.ClassLoader,[Ljava.lang.Class;)
            getInvocationHandler(java.lang.Object)
            newProxyInstance(java.lang.ClassLoader,[Ljava.lang.Class;,java.lang.reflect.InvocationHandler)
            wait(long)
            wait()
            wait(long,int)
            getClass()
            notify()
            notifyAll()
             */
        }
    }
  • 相关阅读:
    IOS无线客户端自动化测试
    junit 测试报错 java.lang.Exception: No runnable methods
    mysql varchar(128)可以存多少汉字
    求两个数的百分比
    日期转换
    两个 integer 值判断是否相等
    整洁代码之道——重构
    Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉
    #dubbo# XML文件报错dubbo:XX解决方法
    String处理入门
  • 原文地址:https://www.cnblogs.com/qq-757617012/p/4274903.html
Copyright © 2011-2022 走看看