Tôi chỉ có một kinh nghiệm xử lý sự cố khá đau đớn trong xử lý sự cố một số mã trông như thế này:Là một khối cuối cùng mà không có một khối catch một java anti-pattern?
try {
doSomeStuff()
doMore()
} finally {
doSomeOtherStuff()
}
Vấn đề là rất khó để khắc phục sự cố vì doSomeStuff() ném một ngoại lệ, do đó gây ra doSomeOtherStuff() cũng để ném một ngoại lệ. Ngoại lệ thứ hai (được ném bởi khối cuối cùng) đã được ném lên mã của tôi, nhưng nó không có một xử lý trên ngoại lệ đầu tiên (được ném từ doSomeStuff()), đó là nguyên nhân gốc thực sự của vấn đề.
Nếu mã đã nói điều này thay vào đó, vấn đề có thể đã được dễ dàng rõ ràng:
try {
doSomeStuff()
doMore()
} catch (Exception e) {
log.error(e);
} finally {
doSomeOtherStuff()
}
Vì vậy, câu hỏi của tôi là thế này:
là một khối finally đã qua sử dụng mà không cần bất kỳ khối catch một tốt được biết đến java anti-pattern? (Nó chắc chắn có vẻ là một lớp con không rõ ràng của mô hình chống nổi tiếng rõ ràng "Đừng gobble ngoại lệ!")
Xem thêm một câu hỏi tương tự như trên [thử-cuối cùng mà không catch trong C#] (http://stackoverflow.com/questions/128818/why-is-try-finally-good-try-catch-bad) - các áp dụng cùng một đối số. – avandeursen