Могу ли я получить все методы classа?

Предположим, что у меня есть .class-файл, могу ли я получить все методы, включенные в этот class?

Чтобы узнать обо всех методах, используйте этот оператор в консоли:

javap java.packagename.classname

Пример: javap java.lang.StringBuffer

Прямо от источника: 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); } } } 
 public static Method[] getAccessibleMethods(Class clazz) { List result = new ArrayList(); 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()]); } 

Вы можете использовать API Reflection

 package tPoint; import java.io.File; import java.lang.reflect.Method; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; public class ReadClasses { public static void main(String[] args) { try { Class c = Class.forName("tPoint" + ".Sample"); Object obj = c.newInstance(); Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder() .parse(new File("src/datasource.xml")); Method[] m = c.getDeclaredMethods(); for (Method e : m) { String mName = e.getName(); if (mName.startsWith("set")) { System.out.println(mName); e.invoke(obj, new String(doc.getElementsByTagName(mName).item(0).getTextContent())); } } } catch (Exception e) { e.printStackTrace(); } } } 
  • Вызов метода перехвата в Objective-C
  • Определить метод вне определения classа?
  • C # Делегирование делегата или просто передача ссылки на метод
  • Возможны ли переменные статического classа?
  • Вызывает статические методы через объект «плохая форма»? Зачем?
  • Переопределение и скрытие Java - Confused
  • Извлечение имени вызывающего метода из метода
  • Является ли Java «pass-by-reference» или «pass-by-value»?
  • Неоднозначные методы варгара
  • Когда метод finalize () вызывается в Java?
  • Свойства vs Методы
  • Давайте будем гением компьютера.