• java反射获取方法名称,参数类型


    package com.mysec.reflex;

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

    //通过反射获取方法信息
    public class getMethodUtil {

        public static void main(String[] args) {
            String string = "hell";
            // printClassMethodMessage(string);
    //        printFieldMessage(string);
            printConMessage(string);
        }

        // public static void main(String[] args) {
        // Class<?> c1 = int.class;
        // Class<?> c2 = String.class;
        // Class<?> c3 = double.class;
        // Class<?> c4 = Double.class;
        // Class<?> c5 = void.class;
        // System.out.println(c1.getName());
        // System.out.println(c2.getName());
        // System.out.println(c2.getSimpleName());//不带包名的名称
        // }

        /**
         * 打印类的信息,包括类的成员函数、成员变量(只获取成员函数)
         *
         * @param object
         *            该对象所属类的信息
         */
        public static void printClassMethodMessage(Object object) {// 该类所属 的信息
            // 要获取类的信息,首先要获取类的类类型
            Class<?> class1 = object.getClass();// 传递的是哪个子类的对象,class1就是该子类的类类型
            // 获取类的名称
            System.out.println("类的名称是:" + class1.getName());
            /**
             * Method类,方法对象 一个成员方法就是一个Method对象 getMehtod()方法
             * 获取的是所有得public的函数,包括父类继承的 getDeclaredMethods()获取的是所有该类声明的方法,不同访问权限
             */
            Method[] ms = class1.getMethods();
            for (int i = 0; i < ms.length; i++) {
                // 得到方法的返回值类型的类类型
                Class<?> returnType = ms[i].getReturnType();
                System.out.print(returnType.getName() + " ");
                // 得到方法的名称
                System.out.print(ms[i].getName() + "(");
                // 获取参数类型
                Class[] paramTypes = ms[i].getParameterTypes();
                for (Class class2 : paramTypes) {
                    System.out.print(class2.getName() + ",");
                }
                System.out.println(")");

                printFieldMessage(class1);
            }
        }

        /**
         * 获取成员变量信息
         *
         * @param object
         */
        private static void printFieldMessage(Object object) {
            // 要获取类的信息,首先要获取类的类类型
            Class<?> class1 = object.getClass();// 传递的是哪个子类的对象,class1就是该子类的类类型
            // 获取类的名称
            System.out.println("类的名称是:" + class1.getName());
            /**
             * 成员变量也是对象 java.lang.reflect.Field Field类封装了关于成员变量的操作
             * getFields()方法获取的是所有的public的成员变量的信息
             * getDeclaredFields获取的是该类自己声明的成员变量的信息
             */
            // Field[] fs = class1.getFields();
            Field[] fs = class1.getDeclaredFields();
            for (Field field : fs) {
                // 得到成员变量的类型的类类型
                Class<?> filedType = field.getType();
                String typeName = filedType.getName();
                String fieldName = field.getName();
                System.out.println(typeName + " " + fieldName);
            }
        }

        /**
         * 打印对象的构造函数的信息
         *
         * @param object
         */
        public static void printConMessage(Object object) {
            Class<?> class1 = object.getClass();
            /**
             * 构造函数也是对象 java.lang.Constructor中封装了构造函数的信息
             * getConstructors获取所有的public的构造函数 getDeclaredConstructors得到所有的构造函数
             */
            // Constructor[] cs = class1.getConstructors();
            Constructor[] cs = class1.getDeclaredConstructors();
            for (Constructor constructor : cs) {
                System.out.print(constructor.getName() + "(");
                // 获取构造函数的参数列表--->得到的是参数列表的类类型
                Class[] paramTypes = constructor.getParameterTypes();
                for (Class class2 : paramTypes) {
                    System.out.print(class2.getName() + ",");
                }
                System.out.println(")");
            }
        }

    }

  • 相关阅读:
    有关css的效果展示
    php将代码上传至服务器步骤
    php连接数据库
    PHP如何从一个页面跳转到另一个页面
    Windows计算器
    查询本地正在运行的端口号
    wamp虚拟路径访问配置
    sublime text3 Emmet (原zenCoding)安装方法
    Latex(一)公式自动编号与自动引用
    Linux下Django开发学习(一)
  • 原文地址:https://www.cnblogs.com/bsyx/p/7106446.html
Copyright © 2020-2023  润新知