2013-03-18 2 views
9

Я нашел явное обращение e.fillInStacktrace() непосредственно после создания исключения Exception e = new Exception().Является ли invoke исключения.fillInStacktrace полезным?

Я думаю, что это избыточно, потому что конструктор Throwable уже вызывает fillInStacktrace().

Но, возможно, я проглядел что-то и эти строки полезны:

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

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

Я думаю

  1. дополнительный вызов e.fillInStackTrace(); непосредственно после создания исключение является излишним и будет много ресурсов, потому что этот метод дорог.

  2. Это швы, что эта конструкция необходима только для получения текущего StackTrace, поэтому:

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

    это лучший способ.

Прежде чем заполнять отчет о проблеме, я хочу спросить вас, не упустил ли я что-нибудь?

ответ

8

Вы верны по обоим вопросам: самая большая причина, по которой fillInStackTrace даже доступна, позволит вам переопределить ее в своих собственных исключениях, где вы хотите сохранить расходы на предоставление информации о трассировке стека или где вам нужно скрыть информацию о местоположении, из которого могло быть выбрано исключение. См. this answer для более подробной информации.

Смежные вопросы