调用exception.fillInStackTrace方法有什么用处?

11

我在创建异常Exception e = new Exception()后发现一个显式调用e.fillInStacktrace()

我认为这是多余的,因为Throwable的构造函数已经调用了fillInStacktrace()

但也许我忽略了什么,这几行可能是有用的:

Exception e = new Exception();
e.fillInStackTrace();
creationInfo = new CreationInfo(e.getStackTrace());

(public CreationInfo(StackTraceElement[] aStackTrace){...})

我认为:

  1. 在创建异常后直接调用e.fillInStackTrace();会浪费很多资源,因为这个方法很耗费资源。

  2. 看起来这个结构只是为了获取当前的堆栈跟踪信息,因此:

  3. creationInfo = Thread.currentThread().getStackTrace();
    

    在提交问题报告之前,我想问一下您是否有看漏了什么?

  4. 是更好的方式。

1个回答

11
你的两个观点都是正确的:fillInStackTrace 能用的最大原因是允许你在自己的异常中覆盖它,以便在需要隐藏异常抛出位置信息或者不提供堆栈跟踪信息的情况下节省成本。更多细节请参阅该回答

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接