java - 如何找出是否在 Java 中从 catch block 调用了相同的方法?

标签 java

我有一种方法,例如void abc(){} 并且此方法直接从我的 main() 方法以及它的异常 block (即 catch block )调用。

现在我想在 abc() 方法中找出 abc() 是否被正常调用(即从 main() ) 或在异常情况下调用(即来自 catch() block )。

我试过这个,使用 Thread.getCurrentStackTrace() ,但是它总是返回 main() 方法(作为方法名称),因为在这两种情况下方法将始终保留一样。

这里重要的一点是,我不能更改 abc() 方法的签名,我不能在 main() 方法或 catch() block 中设置任何标志,由于这个限制,我试图找出如何检查从哪里调用 abc() 或简单地说....如何确定 abc() 方法内是否抛出异常。

请推荐!

最佳答案

使用 StackTraceElement ,您可能会得到行号,从中您可以确定 abc() 是否从 main() 的 catch block 中调用。 参见 here . 它与您已经尝试过的类似,但您得到的是行号

注意:只有当您有 main 方法的源代码以查看行号时,这才有效。如果 main 在源代码不可用的外部 jar 中,则将无法工作。

编辑:另外,如果外部 jar 是在没有行号调试信息的情况下创建的,这将不起作用。

关于java - 如何找出是否在 Java 中从 catch block 调用了相同的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31260660/

相关文章:

java - 我可以让 Tomcat 作为转储堆的服务运行吗?

java - 将OffSetDateTime字符串转换为ZonedDateTime Java

java - NoSuchMethodError : org. hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;

java - 如何使用 apache poi XSSF 获取 xlsx 文件的文件名?

java - 如何让 Java 每分钟将 ArrayList 的内容写入文件一次?

java - 使用java在windows中传递参数并运行.cmd文件

java - 添加到 JFrame 时自定义 JPanel 对象重叠

java - lib 中的 apache-cassandra-x.x.x.jar 在哪里?

java - 无法使用 yaml 方法从 java 对象获取特定值

java - EJB - 如何将复杂对象传输到表示层?