Могу ли я получить все методы classа?
Предположим, что у меня есть .class-файл, могу ли я получить все методы, включенные в этот class?
- Если оператор using == дает неожиданный результат
- Вызывать прямые методы или методы с аргументами / переменными / параметрами в EL
- Ошибка удаления гибернации: пакетное обновление возвращено Неожиданное количество строк
- Как переопределить to_json в Rails?
- В чем разница между методом и функцией?
- Вызов метода с приемником указателя объектом вместо указателя на него?
- В чем разница между методами classа и экземпляра?
- Перейти к встроенному методу дочернего метода struct call вместо родительского метода
Чтобы узнать обо всех методах, используйте этот оператор в консоли:
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(); } } }