Чи корисно використовувати NoStackTrace в масштабі?


11

Я натрапив на NoStackTraceміксин за винятками у шкалі.

Чи корисно це використовувати, чи це слід вважати "внутрішньою" шкалою та залишати її в спокої?

Відповіді:


14

На мить перейдемо до переповнення стека - Наскільки повільними є винятки 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.

Не заселяйте те, що вам не потрібно. Вас не хвилює слід стека, тому що ви обробляєте його тут же. Це не щось, що передається, і це не все, що виняткове.

Не погана практика використовувати його, коли ви знаєте, з чим обробляєтесь. Але, якщо ви передаєте це по ланцюгу вгору - не використовуйте його - можливо, вам просто потрібно буде ввійти звідки, звідки з’явився якийсь виняток.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.