Предположим, у меня есть файл .class, могу ли я получить все методы, включенные в этот класс?
Прямо из источника: 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); } } }
Чтобы узнать обо всех методах, используйте это утверждение в консоли:
javap java.packagename.classname
Пример: javap java.lang.StringBuffer
javap java.lang.StringBuffer
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()]); }
Вы можете использовать Reflection API
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(); } } }