Как стать автором
Обновить

Комментарии 1

Забавное использование, но, имхо, нестабильное.

Как минимум, вычисление `int start` для избегания конструктора этого класса в `StackTraceElement[]` зависит от реализации конкретной jvm, емнип.

Оно может стабильно работать до некторого времени, например, пока не произойдёт апгрейд с 11 версии джавы на 17, а потом и на какую-нибудь 21-ю. Потому что в момент перехода openjdk с 5-6 до 8 версии, кажется, стало надо сдвигать не на два элемента, а на один. Или что-то в этом роде, не помню.

UPD: какой-то ответ на stackoverflow. Там ещё рядом есть про StackWalker API, про который я напрочь забыл, но голосоволка говорит, что я его уже видел. :D
---

Странный момент с сохранением этого псевдоисключения в поле объекта – туда же можно и обычное исключение сохранить, через `var field = new IllegalStateException("Some reason")`, а потом уже `throw` сделать в другом месте. (Или дважды, но там, кажется, со стектрейсом проблемы какие-то, он единожды вычисляется. Не уверен. Статические инстансы исключений не работают).

---

Для получения стектрейса можно и `Thread.curentThread().getStackTrace()` или что-то подобное использовать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории