• 通过Reflection来获得方法和信息


    package liangxi;

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;

    public class ClassDemo3 {
    //打印类的信息,包括类的成员函数、成员变量
    // obj 该对象所属的信息
    public static void printClassMethodMessage(Object obj){
    //要获取类的信息 首先要获取类的类类型
    Class c = obj.getClass();//传递的是那个子类的对象 c就是该子类的类类型
    //获取类的名称
    System.out.println("类的名称是:"+c.getName());
    Method[]ms = c.getMethods();//c.getDeclaredMethod()
    //Method 类,方法对象
    //一个成员方法就是一个Method对象
    //getMethod()方法获取的是所有的public 的函数,包括父类继承而来的
    //getDeclaredMethod()获取的是所有该类自己声明 的方法,不问访问权限
    for(int i = 0; i<ms.length;i++){
    //得到方法的返回值类型的类类型
    Class returnType = ms[i].getReturnType();
    System.out.print(ms[i].getName());
    //得到方法的名称
    System.out.print(ms[i].getName()+"(");
    //获取参数类型 -->得到的是参数列表的类型的类类型
    Class[] paramTypes = ms[i].getParameterTypes();
    for(Class class1 : paramTypes ){
    System.out.print(class1.getName()+",");
    }
    System.out.println(")");
    printFieldMessage(c);
    }

    }

    public static void printFieldMessage(Object obj) {
    Class c =obj.getClass();

    //成员变量也是对象
    //java.lang.reflect.Field
    //Field类封装了关于成员变量的操作
    //getFields()方法获取的是所以的public的成员变量的信息
    //getDeclaredFields获取的是该类自己声明的成员变量的信息
    //Field[]fs=c.getFields();
    Field[] fs = c.getDeclaredFields();
    for(Field field :fs){
    //得到成员变量的类型的类类型
    Class typeName = field.getType();
    String fieldName = field.getName();
    System.out.println(typeName+""+fieldName);
    }
    }
    public static void printConMessage(Object obj){
    Class c = obj.getClass();
    //java.lang.Constructor中封装了构造函数的信息
    //构造函数也是对象
    //Constructor[] cs = c.getConstructors();
    Constructor[]cs = c.getDeclaredConstructors();
    for(Constructor constructor:cs){
    System.out.print(constructor.getName()+"(");
    //获取构造函数的参数列表
    Class[]paramTypes = constructor.getParameterTypes();
    for(Class class1:paramTypes){
    System.out.print(class1.getName()+",");
    }
    System.out.println(")");
    }
    }

    }

    测试

    package liangxi;

    import java.lang.reflect.Field;

    public class ClassDemo33 {
    public static void main(String[] args) {
    String s = "hello";
    ClassDemo3.printClassMethodMessage(s);


    Integer n1 = 1;

    ClassDemo3.printClassMethodMessage(n1);
    //通过class类来获得类的所以方法信息 返回所以Integer类的信息
    //成员变量也是对象
    //java.lang.reflect.Field
    //Field类封装了关于成员变量的操作

    }
    }

    输出结果就是Reflection出来的所有的方法和信息

  • 相关阅读:
    [Give a try | Multithreading]The Practical Guide to Multithreading
    [SOLID]The Principles of OOD
    Mixing Native and Managed Types in C++
    [转载]关于大型软件重构的一些想法
    Mixed mode programming is the absolute power of C++/CLI
    Sample: Mixing Unmanaged C++, C++/CLI, and C# code
    添加删除虚函数带来的问题及解决办法
    如何阅读code base的组内讨论的总结
    如何快速定位一个函数的返回点(c/c++ Only)
    DirextX Training笔记
  • 原文地址:https://www.cnblogs.com/zs520/p/6866691.html
Copyright © 2020-2023  润新知