【问题标题】:How to get all possible callers of a method in Java - like call hierarchy如何在 Java 中获取方法的所有可能调用者——比如调用层次结构
【发布时间】:2014-10-24 19:31:36
【问题描述】:

假设我在一个类中有一个方法 m。我试图找到整个项目中调用 m 的所有方法。类似于 eclipse 的调用层次结构工具,除了我需要它来输出方法列表/数组。我需要它是静态的,所以我认为堆栈跟踪不起作用。有没有办法实现这一点,也许使用反射?

我附加了指向 Eclipse 调用层次结构工具示例的链接,找到了 Dog 类中提到方法 barking() 的所有方法。 (Dog.hungry() 和 Cat.scratching() 调用 barking())。

【问题讨论】:

  • 我想这已经回答了here

标签: java eclipse reflection call-hierarchy


【解决方案1】:

“标准”java 反射可能对此没有任何帮助。

我会尝试使用开源的Reflection 库。

您可以使用 via 搜索方法:

Set<Member> usages = reflections.getMethodUsages(Method.class)

【讨论】:

  • 我试图将项目克隆到我的 Eclipse 中,这样我就可以用它制作一个罐子,但它一直告诉我它是空的。我对添加开源库不是很熟悉。如果我用maven安装,会不会是一个插件在运行时给我打开一个新的eclipse窗口?
  • 尝试使用 maven ...它会将其添加为自己的依赖项(jar)。但我相信您可以直接下载它并将其作为本地依赖项添加到 Eclipse 项目中。你用谷歌搜索过吗? ... 喜欢这里:code.google.com/p/reflections/downloads/list
  • Hey Drejc,所以我从链接中下载了最新的 jar,并将其添加到我的 jars 文件中,然后进入我的 java 构建路径并将其添加到那里。但是当我使用反射时,它会询问我是否要添加“import org.reflections.Reflections;”而不是“导入静态 org.reflections.ReflectionUtils.*;”。当我导入其中任何一个时,“Set usages = reflections.getMethodUsages(Method.class)”给了我一个错误。知道为什么吗?再次感谢
  • 这里有几个我尝试和失败的截图。我也不确定我是否正确地构建了反射imgur.com/a/0YBJH
  • 真的很难说什么是“错误的”,但我建议先看一些简单的例子,如果你看一下 Reflections 项目中的测试,你会发现很多用例。快速浏览一下,我发现了这一点:Reflections reflections = new Reflections(TestModel.class, new FieldAnnotationsScanner());可能是要走的路......当然使用不同的扫描仪。
猜你喜欢
  • 2010-11-14
  • 2012-12-08
  • 2012-01-13
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
相关资源
最近更新 更多