如何使用Java反射获取方法签名?
编辑: 我实际上需要参数NAMES而不是方法的类型。
答案 0 :(得分:9)
要获得C类的方法i,请调用C.class.getMethods()[i].toString()
。
编辑:使用反射API获取参数名称 。
但是,如果您使用调试信息编译您的类,则可以从字节码中提取信息。 Spring使用ASM bytecode engineering library来完成它。
有关详细信息,请参阅this answer。
答案 1 :(得分: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);
答案 2 :(得分: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);
}
}
}