-2
A
回答
1
反射可以是非常有用的,但如果你不明白它会非常复杂。
如果你有类的名称,并且要打印的方法:
Class c = Class.forName(the_class_name);
for(Method m : c.getMethods()) {
System.out.println(m.toString());
}
如果你想获得任何对象的类的名称:
String className = the_object.getClass().getName();
的组合两个可能看起来像这样:
for(Method m : the_object.getClass().getMethods())
System.out.println(m.toString());
我想你所要求的是所有方法的名称从A
那B
调用。
这不能真正做到反思,主要是因为Java没有提供任何方法来做到这一点。
The API一如既往提供更多信息。如果你通过那里看,你可能会想出一个简单的解决方法。
1
“A级或B级调用的所有函数的类”令人困惑。但是,如果您想将调用方的类和函数名称设置为A
中描述的方法detectsName
,那么下面的代码将对您有用。
public class A {
public void detectsName() {
Throwable t = new Throwable();
StackTraceElement traceLine = t.getStackTrace()[1];
// t.printStackTrace();
String className = traceLine.getClassName();
String methodName = traceLine.getMethodName();
int lineNumber = traceLine.getLineNumber();
System.out.println(className);
System.out.println(methodName);
System.out.println(lineNumber);
}
}
如果您从任何其他类这种方法说 - B,它会被检测到。
public class B {
public static void main(String[] args) {
A a = new A();
a.detectsName();
}
}
3
您不能使用Java反射来执行这样的静态代码分析任务。反射API不提供所需的信息。
关闭我的头顶,我能想到的,将工作两种方法:
如果只有“.class”的文件,那么你可以使用一个字节码的库,例如BCEL到加载类并遍历它们以识别所有的方法调用。
如果您有源代码,您还可以使用一些现有的Java分析器库为您的代码创建AST并分析它们。
(第一种方法可能是简单的,如果你想要的是类和方法名的列表。)
0
Dependency Finder这个可以做查询。它的方法是用XML生成元数据,然后使用基于正则表达式的比较。您可能正在专门寻找名为“封闭”的功能,并带有入站引用。
相关问题
- 1. BCEL - 获取类名称,元素名称和方法名称
- 2. R获取函数参数的名称
- 3. 使用.net获取名称表,名称列,名称数据
- 4. 获取装饰函数的名称?
- 5. jQuery +获取函数的名称
- 6. 获取函数的名称空间
- 7. JavaScript - 获取调用函数的名称
- 8. 如何获取函数的名称?
- 9. 获取当前VBA函数的名称
- 10. Parse.com:获取Parse.Object类名称
- 11. 获取类名称+继承
- 12. 获取父类名称?
- 13. 获取JSTL中数组的类名称
- 14. 捕获函数名称
- 15. 按名称获取函数描述符:
- 16. 在Swift中获取函数名称
- 17. 从DLL获取函数名称
- 18. 从自己获取函数名称
- 19. 函数名称$
- 20. 函数参数名称和类变量名称的区别
- 21. WordPress的 - 从术语id(ACF)获取分类名称的名称
- 22. 在父类中获取子类的函数名称
- 23. 获取类模板的类型名称
- 24. 无效名称(类型名称1,类型名称2,类型名称3 [名称1] [名称2]);
- 25. 获取python类的属性名称/获取查询的列名称
- 26. 按名称获取
- 27. 按名称获取记录器,打印类名称
- 28. PHP在静态函数中获取子类的名称
- 29. 在Python中,如何获取成员函数类的名称?
- 30. 从扩展类中获取类名称
目前还不清楚问题是什么,请更新您的问题,以使您试图做得更清楚。也请张贴你已经尝试过的代码。 – 2012-03-07 04:51:40
你想在运行时执行此操作吗?通过静态分析?到目前为止,你已经发布的这个标准并不是真正的问题。 – 2012-03-07 05:02:05
@JimGarrison我想通过静态分析来做到这一点。 – Saurabh 2012-03-07 05:07:54