假设我有一个.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