Nigdy wcześniej nie zajmowałem się poważnym kodowaniem w Javie, ale nauczyłem się składni, bibliotek i koncepcji w oparciu o moje istniejące umiejętności (Delphi i C #). Jedyną rzeczą, której prawie nie rozumiem, jest to, że widziałem tyle kodu, który po cichu pochłania wyjątki po printStackTrace
tak:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
Jest podobny kod jak ten w prawie każdym artykule i projekcie Java, z którym się spotkałem. W oparciu o moją wiedzę jest to bardzo złe. Wyjątek powinien prawie zawsze być przekazywany do kontekstu zewnętrznego w następujący sposób:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
W większości przypadków wyjątek powinien być obsługiwany w najbardziej zewnętrznej pętli, która należy do podstawowej struktury (na przykład Java Swing). Dlaczego w świecie Javy wygląda to na normę? Jestem zdziwiony.
W oparciu o moje tło wolałbym całkowicie usunąć printStackTrace . Po prostu wrzuciłbym ponownie jako nieobsługiwany aka RuntimeException
(lub nawet lepiej AssertionError
), a następnie złapałbym go i zarejestrował w najbardziej odpowiednim miejscu: najbardziej zewnętrznej pętli struktury.
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}