调用exception.fillInStacktrace有用吗?

Ral*_*lph 10 java stack-trace

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

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

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

Exception e = new Exception();
e.fillInStackTrace();
creationInfo = new CreationInfo(e.getStackTrace());
Run Code Online (Sandbox Code Playgroud)

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

我认为

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

  2. 它接缝这个构造只需要获取当前的栈跟踪,因此:

    creationInfo = Thread.currentThread().getStackTrace();
    
    Run Code Online (Sandbox Code Playgroud)

    是更好的方法.

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

das*_*ght 9

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