11

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

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

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

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

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

我认为

  1. e.fillInStackTrace();在创建异常后直接额外调用是多余的,并且会浪费大量资源,因为这种方法很昂贵。

  2. 它似乎只需要这个构造来获取当前的堆栈跟踪,因此:

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

    是更好的方法。

在填写问题报告之前,我想问您我是否忽略了什么?

4

1 回答 1

10

您在两个方面都是正确的:甚至可用的最大原因fillInStackTrace是让您在自己的异常中覆盖它,您希望节省提供堆栈跟踪信息的成本,或者您需要隐藏有关可能引发异常的位置。有关更多详细信息,请参阅此答案

于 2013-03-18T08:57:11.017 回答