zoukankan      html  css  js  c++  java
  • 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(")");
            }
        }

    }

  • 相关阅读:
    天梯赛5-12 愿天下有情人都是失散多年的兄妹 【dfs】
    poj2718 Smallest Difference【贪心】
    HDU problem 5635 LCP Array【思维】
    codeforces 782C Andryusha and Colored Balloons【构造】
    HDU 4278 Faulty Odometer【进制转换】
    codeforces B. The Meeting Place Cannot Be Changed【二分】
    POJ 3264 Balanced Lineup 【线段树】
    HDU 1850
    CodeForces-714C
    HDU Problem 1247 Hat's Words 【字典树】
  • 原文地址:https://www.cnblogs.com/bsyx/p/7106446.html
Copyright © 2011-2022 走看看