Я ніколи раніше не займався серйозним кодуванням Java, але я вивчив синтаксис, бібліотеки та концепції, виходячи зі своїх існуючих навичок (Delphi & C #). Одне я навряд чи розумію, що я бачив стільки коду, що мовчки споживає винятки після printStackTraceтакого:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
Подібний код, подібний до цього, є майже у кожній статті та проекті Java, з якими я стикався. Виходячи з моїх знань, це дуже погано. Виняток майже завжди слід пересилати до зовнішнього контексту так:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
Більшу частину часу виняток повинен оброблятися в самому зовнішньому циклі, який належить до базового фреймворку (наприклад, Java Swing). Чому подібне кодування у світі Java виглядає нормально? Я спантеличений.
Грунтуючись на моєму фоні, я б вважав за краще , щоб видалити printStackTrace повністю . Я б просто перекинув його як необробленого ака RuntimeException(або, що ще краще AssertionError), а потім ловив і реєстрував у найвідповіднішому місці: найвіддаленіша петля фреймворка.
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}