假设我有以下方法及其调用:
public static void main(String[] args) {zoo();}
public static void zoo() {zoo(0);}
public static void zoo(int i) {too(i);}
public static void too(int i) {...}
Thread.currentThread().getStackTrace()
会返回给我类似的东西:
A.too(A.java:56)
A.zoo(A.java:65)
A.zoo(A.java:60)
A.main(A.java:80)
通过这个输出,我无法区分 2zoo
我在我的示例中定义了一个没有任何参数的(zoo()
)和一个带有整数参数(zoo(int i)
)。原因是因为只输出方法名称而不是其签名。有没有办法获得一堆方法签名?
的文档堆栈跟踪元素 https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/StackTraceElement.html#toString()Java 13 中清楚地表明没有办法做到这一点。你可以通过人脑通过行号来识别重载方法。如果可能的话,自动化此任务将是矫枉过正(需要使用hard反射),尽管我并不认为某些库可以做到这一点。
备注:.class 文件实际上是二进制文件格式有方法签名信息 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html(至少是参数列表),因此这并不是不可能,只是到目前为止还没有人开发它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)