4

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

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

4

3 回答 3

9

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

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

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

有关更多信息,请参阅此答案

于 2012-01-31T14:37:23.450 回答
2

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

将对象的toString()方法java.lang.reflect.Method用于您正在寻找的方法。

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

Method toString = class.forName("java.lang.String").getDeclaredMethod("toString");
System.out.println(toString);
于 2012-01-31T14:32:41.013 回答
0
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);
        }
    }
}
于 2012-01-31T14:36:08.563 回答