2012-01-31 114 views

回答

9

要获得方法我一个C类调用C.class.getMethods()[i].toString()的。

编辑:获取参数名称使用反射API是可能的。

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

有关更多信息,请参阅this answer

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

http://java.sun.com/developer/technicalArticles/ALT/Reflection/ – bmoran 2012-01-31 14:37:15