问题描述
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)
使用此输出,我无法区分我在示例中定义的 2 个 zoo
,一个没有任何参数 (zoo()
),另一个带有整数参数 (zoo(int i)
)。原因是因为只输出方法名称而不是它们的签名。有没有办法得到一堆方法签名?
解决方法
Java 13 中 StackTraceElement 的文档清楚地表明没有办法做到这一点。您可以通过人脑通过行号识别重载方法。如果可能的话,自动化这个任务将是矫枉过正(需要使用硬反射),尽管我不认为某些库可以做到这一点。
备注:.class文件的二进制文件格式实际上是has the method signature information(至少是参数列表),所以也不是不可能,只是到现在还没有人开发。