【问题标题】:How to get parameter names with Java reflection [duplicate]如何使用Java反射获取参数名称[重复]
【发布时间】:2012-01-31 14:30:08
【问题描述】:

如何使用 Java 反射获取方法签名?

编辑: 我实际上需要的是参数 NAMES 而不是方法的类型。

【问题讨论】:

    标签: java reflection method-signature


    【解决方案1】:

    要获取类 C 的方法 i,请调用 C.class.getMethods()[i].toString()

    编辑:无法使用反射 API 获取 参数名称

    但是当你用调试信息编译你的类时,可以从字节码中提取信息。 Spring 使用 ASM bytecode engineering library 来实现。

    更多信息请参见this answer

    【讨论】:

      【解决方案2】:

      http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/Method.html#toString()

      java.lang.reflect.Method 对象的toString() 方法用于您要查找的方法。

      如果您想知道如何获取该方法对象,只需将其用作参考:

      Method toString = class.forName("java.lang.String").getDeclaredMethod("toString");
      System.out.println(toString);
      

      【讨论】:

        【解决方案3】:
        import java.lang.reflect.Method;
        
        public class method1 {
            private int f1(Object p, int x) throws NullPointerException
            {
                if (p == null)
                    throw new NullPointerException();
                return x;
            }
        
            public static void main(String args[])
            {
                try {
                    Class cls = Class.forName("method1");
        
                    Method methlist[] = cls.getDeclaredMethods();
                    for (int i = 0; i < methlist.length; i++) {
                        Method m = methlist[i];
                        System.out.println("name = " + m.getName());
                        System.out.println("decl class = " + m.getDeclaringClass());
                        Class pvec[] = m.getParameterTypes();
                        for (int j = 0; j < pvec.length; j++)
                            System.out.println("param #" + j + " " + pvec[j]);
                        Class evec[] = m.getExceptionTypes();
                        for (int j = 0; j < evec.length; j++)
                            System.out.println("exc #" + j + " " + evec[j]);
                        System.out.println("return type = " + m.getReturnType());
                        System.out.println("-----");
                    }
                }
                catch (Throwable e) {
                    System.err.println(e);
                }
            }
        }
        
        猜你喜欢
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 2012-05-31
        • 2010-10-19
        相关资源
        最近更新 更多