创建异常e.fillInStacktrace()之后,我直接找到了对Exception e = new Exception()的显式调用。

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

但是也许我忽略了一些东西,这些行很有用:

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

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

我认为
  • 在创建异常后直接额外调用e.fillInStackTrace();是多余的,并且会浪费大量资源,因为此方法很昂贵。
  • 它似乎仅需要此构造即可获取当前的堆栈跟踪,因此:
    creationInfo = Thread.currentThread().getStackTrace();
    

    是更好的方法。

  • 在填写问题报告之前,我想问一问我是否忽略了某些内容?

    最佳答案

    两种说法都是正确的:甚至可以使用fillInStackTrace的最大原因是让您在自己的异常中覆盖它,以节省提供堆栈跟踪信息的成本,或者需要隐藏有关以下内容的信息:引发异常的位置。有关更多详细信息,请参见this answer

    关于java - 调用exception.fillInStacktrace有用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15472719/

    10-11 21:38