50_创建动态类及查看其方法列表信息

简介: package com.itcast.day3; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.
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)

        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()
         */
    }
}
开始做,坚持做,重复做
相关文章
|
10月前
|
算法 Python
创建三个学生对象,分别打印其详细信息
创建三个学生对象,分别打印其详细信息
70 0
|
10月前
|
Java 编译器
深入探索: 对象构造的隐藏功能与技巧
深入探索: 对象构造的隐藏功能与技巧
74 0
|
缓存
读源码长知识 | 动态扩展类并绑定生命周期的新方式
在阅读viewModelScope源码时,发现了一种新的方式。 协程需隶属于某 CoroutineScope ,以实现structured-concurrency,而 CoroutineScope 应
136 0
|
Python
Python编程:类的实例动态增加属性和方法
Python编程:类的实例动态增加属性和方法
103 0
|
监控 JavaScript 前端开发
一个简单的小技巧,监控网页所有动态标签创建的调用处
一个简单的小技巧,监控网页所有动态标签创建的调用处
104 0
一个简单的小技巧,监控网页所有动态标签创建的调用处
|
C++
VS 显示方法引用的设置方法
VS 中Codelens的设置面板没有相关的设置项?那如何调整出方法的引用呢?
1947 0
VS 显示方法引用的设置方法
附加属性的不同使用方式
原文:附加属性的不同使用方式     [AttachedPropertyBrowsableForType(typeof(ButtonBase))] public static void SetIsClearTextButtonBehaviorEnabled(Button obj, bool value) { obj.
733 0
|
C#
基于继承类的属性模版中无法绑定的原因和解决方法
原文:基于继承类的属性模版中无法绑定的原因和解决方法 这个的晚上想学学WPF 做一个类似于ERP 左边菜单。构思一下思路 。。。。。。   创建一个类基于Expander类。 1 public class ExpanderBox : Expander 2 { 3 ...
807 0
phpstrom怎样显示类的方法或函数列表
来源:http://www.ecjson.com/article/28.html
4823 0