【发布时间】:2017-11-03 17:45:18
【问题描述】:
我想列出一个方法调用的所有方法。
void create() throws MyException {
System.out.println("TEST");
of("String").map(String::valueOf).get();
}
我想在这个方法中列出
- System.out.println
- 的
- 地图
- String::valueOf
- get();
我已经习惯了以下代码,来自how to find all methods called in a method?
public class MethodFinder {
public static void main(String[] args) throws Throwable {
ClassPool cp = ClassPool.getDefault();
CtClass ctClass = cp.get("MyClass");
CtMethod method = ctClass.getDeclaredMethod("getItem1");
method.instrument(
new ExprEditor() {
public void edit(MethodCall m)
throws CannotCompileException
{
System.out.println(m.getClassName() + "." + m.getMethodName() + " " + m.getSignature());
}
});
}
}
并获取除 String::valueOf 之外的所有方法
这是否由任何其他框架解决都没关系。
【问题讨论】:
-
请注意这是正确的,因为您的方法
create没有调用方法String.valueOf,而只是获取对该方法的引用并将其传递给map 方法。严格来说,您的方法不知道传递的方法是否真的被调用过。 -
有什么办法可以解决:)?
-
我只需要传入的方法的引用
-
你的代码没有列出
System.out.println,因为那不是方法调用。方法调用是println,应用于PrintStream实例。除此之外,你不应该import static像of这样的方法。仅在 JRE API 中就有 60 多个同名的方法,您迫使读者猜测实际方法,尤其是在这个问题中,我们无法向上滚动到您的import语句。
标签: java bytecode javassist cglib byte-buddy