Tôi chưa bao giờ viết mã Java nghiêm túc trước đây, nhưng tôi đã học cú pháp, thư viện và khái niệm dựa trên các kỹ năng hiện có của mình (Delphi & C #). Một điều tôi khó hiểu là tôi đã thấy quá nhiều mã âm thầm sử dụng các ngoại lệ sauprintStackTrace
như thế này:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
Có những đoạn mã tương tự như đoạn mã này trong hầu hết các bài báo và dự án Java mà tôi đã chạy. Dựa trên kiến thức của tôi thì điều này rất tệ. Ngoại lệ hầu như luôn luôn được chuyển tiếp đến ngữ cảnh bên ngoài như sau:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
Hầu hết thời gian ngoại lệ sẽ được xử lý ở vòng ngoài cùng thuộc về khung cơ bản (ví dụ: Java Swing). Tại sao nó giống như tiêu chuẩn để viết mã như thế này trong thế giới Java? Tôi đang phân vân.
Dựa trên nền tảng của tôi, tôi muốn loại bỏ printStackTrace hoàn toàn . Tôi chỉ đơn giản là sẽ ném lại dưới dạng một aka chưa được xử lý RuntimeException
(hoặc, thậm chí tốt hơn, AssertionError
), sau đó bắt và ghi lại nó ở nơi thích hợp nhất: vòng lặp ngoài cùng của khung.
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}