Я никогда раньше не делал серьезных Java-кодировок, но я изучил синтаксис, библиотеки и концепции на основе моих существующих навыков (Delphi и С#). Одна вещь, которую я почти не понимаю, это то, что я видел столько кода, который молча потребляет исключения после 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. Я бы просто отказался как необработанный aka RuntimeException
(или, даже лучше, AssertionError
), а затем поймал и запустил его в наиболее подходящем месте: крайняя внешняя петля.
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}