Может быть, вам стоит рассмотреть проблему с другой стороны. Вместо того, чтобы изменять трассировку стека, почему бы просто не использовать метод генератора исключений (die
в вашем примере) вернуть исключение, а не выбросить его? Тогда ваш звонок throw die();
.
Например:
// revised die() method:
public static MyException die(String message){
log(message);
//...
return new MyException();
}
// calling code:
throw die("a-whoopsie daisy!");
Теперь, конечно, throw die()
может показаться немного неэстетичным, так что вы можете переименовать die()
в newException()
или что-то в этом роде. Но требование, чтобы метод обработки исключений не отображался в трассировке стека, выполнено - die()
(или newException()
) возвращается до того, как возникнет исключение, и, следовательно, не является частью стека, подлежащего трассировке.
Редактировать: Мой плохой. Я потратил так много времени на работу с C #, что забыл, что в Java трассировки стека исключений генерируются при создании экземпляра, а в C # / .NET трассировки стека исключений генерируются во время выполнения.
Так что этот трюк будет работать в C #, но не в Java.