如何使用Javareflection获取参数名称

如何使用Javareflection获取方法签名?

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

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

编辑:使用reflectionAPI 无法获取参数名称

但是,如果您使用调试信息编译您的类,则可以从字节码中提取信息。 Spring使用ASM字节码工程库来完成它。

有关详细信息,请参阅此答案 。

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); 
 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); } } }