• 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()
             */
        }
    }
  • 相关阅读:
    Android Studio no debuggable applications解决方案2
    Android CountDownTimer倒计时器的使用
    git 创建分支并切换
    com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: current time:
    为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment
    Android 使WebView支持HTML5 Video(全屏)播放的方法
    使用retrofit注意
    解决 Android Studio 乱码问题
    Android视觉规范-间距规范与文字规范单位换算(dip、sp与px)
    教你如何删除WIN7系统文件以及无法删除的文件
  • 原文地址:https://www.cnblogs.com/qq-757617012/p/4274903.html
Copyright © 2020-2023  润新知