2011-03-10 20 views

Respuesta

23

saber acerca de todos los métodos utilizan esta declaración en la consola:

javap java.packagename.classname

Ejemplo: javap java.lang.StringBuffer

49

Directamente desde la fuente: http://java.sun.com/developer/technicalArticles/ALT/Reflection/ Luego lo modifiqué para que fuera autónomo, sin requerir nada desde la línea de comandos. ;-)

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

Por lo tanto, Reemplazo 'Clase' con mi nombre de clase? –

+0

Lo usaría desde la línea de comando 'java DumpMethods com.mypackage.MyClass' – corsiKa

+0

También podría reemplazar' args [0] 'con' "com.mypackage.MyClass" '. Si usa el paquete predeterminado, simplemente puede usar '" MyClass "'. – corsiKa

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()]); 
} 
Cuestiones relacionadas