Відповіді:
На мить перейдемо до переповнення стека - Наскільки повільними є винятки Java?
Виявляється, що дорога частина викидів викидів - це сукупність сліду стека, який йде разом з винятком.
Цей слід стека дуже корисний при налагодженні проблем, щоб спробувати з'ясувати, звідки виклики. Одне із стандартних запитань проблем - "що таке код" і "що таке стек стека". Без цих двох речей діагностика проблеми майже неможлива.
Однак не всі винятки породжуються проблемами . Деякі з них ви майже очікуєте.
Розгляньте ситуацію, коли у вас є String з якогось джерела, і ви хочете повернути його у цілий формат з кодом Integer.de .
Integer foo = Integer.decode(str);
Але це decode
кидає перевірене NumberFormatException
. Гаразд...
Integer foo;
try {
foo = Integer.decode(str);
} catch (NumberFromatException e) {
// raise an error back to the input form
}
Але вам насправді байдуже до сліду стека там ... але його немає. І лише трошки повільніше, тому що вона заповнила слід стека.
Таким чином, у Scala ви отримали NoStackTrace
:
Ознака винятків, яка з міркувань ефективності не заповнює слід стека. Придушення слідів стека можна відключити на глобальній основі за допомогою системної обгортки властивостей у scala.sys.SystemProperties.
Не заселяйте те, що вам не потрібно. Вас не хвилює слід стека, тому що ви обробляєте його тут же. Це не щось, що передається, і це не все, що виняткове.
Не погана практика використовувати його, коли ви знаєте, з чим обробляєтесь. Але, якщо ви передаєте це по ланцюгу вгору - не використовуйте його - можливо, вам просто потрібно буде ввійти звідки, звідки з’явився якийсь виняток.