假設我有一個.class文件,我可以得到該類中包含的所有方法嗎?我可以獲得班級的所有方法嗎?
34
A
回答
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);
}
}
}
5
可以使用Reflection API
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()]);
}
相關問題
- 1. Android:我可以從我自己的班級獲得資源嗎?
- 2. 我可以改變班級的超級班嗎?
- 3. 我可以在另一個班級初始化班級嗎?
- 4. 我如何使用ICompilationUnit獲得班級內的所有註釋
- 5. 如何獲得當前班級所屬的班級?
- 6. 如果所有的孩子都有班級,可以添加班級到家長
- 7. 我可以在不屬於班級或其父母的班級中調用一種方法嗎?
- 8. 我可以在其他班級內創建班級嗎?並呼籲所有在一起
- 9. 如何裝飾班級中的所有方法?我能裝飾課堂嗎?
- 10. 我可以將指針轉換爲我的班級嗎?
- 11. 班級領域可以密封嗎?
- 12. 我可以在使用Guice的方法中獲得實例嗎?
- 13. 我可以在我的班級有一種叫做print(或這樣)的方法嗎?
- 14. Sony SmartWatch2 SW2 - 我可以獲得所有接觸點嗎?
- 15. 可可:無法從另一個班級獲得房產價值?
- 16. 有沒有辦法獲得班級的插槽?
- 17. 有什麼方法可以獲得一些信息,至少可以捕獲(...)嗎?
- 18. JavaScript - 獲得班級名稱
- 19. 獲得班級價值
- 20. 我可以創建一個與班級同名的功能嗎?
- 21. 我可以使用變量作爲班級的名字嗎?
- 22. 我可以只用_(下劃線)作爲班級的名字嗎?
- 23. 我可以使用班級成員的散列碼嗎?
- 24. 班級或班級結構有多大可以實踐?
- 25. 我如何獲得所有可用特殊方法的列表?
- 26. 我可以獲得Velocity內部方法嗎?
- 27. 我可以獲得(Microsoft Web.Helper)Facebook.Helper方法到MVC控制器嗎?
- 28. 我可以從類方法中獲得另一個對象嗎?
- 29. 一個班級可以擁有自己類型的成員嗎?
- 30. 我可以設置一個班級= 8
所以,我用myClass名稱替換'Class'? – 2011-03-10 22:14:44
你可以在命令行中使用它'java DumpMethods com.mypackage.MyClass' – corsiKa 2011-03-10 22:22:39
你也可以用''com.mypackage.MyClass「'替換'args [0]'。如果它使用默認包,則可以使用'「MyClass」'。 – corsiKa 2011-03-10 22:23:17