2011-03-10 35 views

回答

23

要了解所有方法都使用这一说法在控制台:

javap java.packagename.classname

例子:javap java.lang.StringBuffer

49

直接从源代码:http://java.sun.com/developer/technicalArticles/ALT/Reflection/ 然后我修改它是自包含的,不需要命令行中的任何内容。 ;-)

import java.lang.reflect.*; 

/** 
Compile with this: 
C:\Documents and Settings\glow\My Documents\j>javac DumpMethods.java 

Run like this, and results follow 
C:\Documents and Settings\glow\My Documents\j>java DumpMethods 
public void DumpMethods.foo() 
public int DumpMethods.bar() 
public java.lang.String DumpMethods.baz() 
public static void DumpMethods.main(java.lang.String[]) 
*/ 

public class DumpMethods { 

    public void foo() { } 

    public int bar() { return 12; } 

    public String baz() { return ""; } 

    public static void main(String args[]) 
    { 
     try { 
      Class c = DumpMethods.class; 
      Method[] m = c.getDeclaredMethods(); 
      for (int i = 0; i < m.length; i++) 
      System.out.println(m[i].toString()); 
     } catch (Throwable e) { 
      System.err.println(e); 
     } 
    } 
} 
+0

所以,我用myClass名称替换'Class'? – 2011-03-10 22:14:44

+0

你可以在命令行中使用它'java DumpMethods com.mypackage.MyClass' – corsiKa 2011-03-10 22:22:39

+0

你也可以用''com.mypackage.MyClass“'替换'args [0]'。如果它使用默认包,则可以使用'“MyClass”'。 – corsiKa 2011-03-10 22:23:17

5
public static Method[] getAccessibleMethods(Class clazz) { 
    List<Method> result = new ArrayList<Method>(); 
    while (clazz != null) { 
     for (Method method : clazz.getDeclaredMethods()) { 
      int modifiers = method.getModifiers(); 
      if (Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers)) { 
       result.add(method); 
      } 
     } 
     clazz = clazz.getSuperclass(); 
    } 
    return result.toArray(new Method[result.size()]); 
} 
相关问题