Tôi là lập trình viên hư hỏng và cho đến bây giờ tôi chưa xử lý đúng lỗi (ví dụ: chỉ cần bắt một java.lang.Exception, in một thông báo gỡ lỗi và tiếp tục). Khi tôi "xử lý" chúng, nó đơn giản là đóng trình biên dịch lên.Xử lý lỗi - đây có phải là một mẫu khá hay không?
Gần đây tôi đã học được lỗi (haha) theo cách của tôi và muốn bắt đầu thực hiện đúng. Vì vậy, tôi đang nghiên cứu nó ở đây và những nơi khác (thông qua tìm kiếm của Google).
Giả sử tôi có một khối mã mà làm như sau:
...
x.method1(); // throws ExceptionTypeA
...
y.method2(); // throws ExceptionTypeB
...
z.method3(); // throws ExceptionTypeC
...
x.method4(); // throws ExceptionTypeA (again)
...
Từ những gì tôi đã thu thập được, cách thích hợp để xử lý này là:
try {
...
x.method1(); // throws ExceptionTypeA
...
y.method2(); // throws ExceptionTypeB
...
z.method3(); // throws ExceptionTypeC
...
x.method4(); // throws ExceptionTypeA (again)
...
} catch (ExceptionTypeA e) {
// do something about condition A
} catch (ExceptionTypeB e) {
// do something about condition B
} catch (ExceptionTypeC e) {
// do something about condition C
}
này có vẻ khá đơn giản để tôi, nhưng nó có vẻ lộn xộn khi tôi có một khối mã dài mà ném các lỗi khác nhau trong suốt. Tôi dường như gió lên với chỉ một người khổng lồ cố gắng/bắt xung quanh toàn bộ phương pháp của tôi! Cách thay thế có vẻ là:
try {
...
x.method1(); // throws ExceptionTypeA
...
} catch (ExceptionTypeA e) {
// do something about condition A
}
try {
...
y.method2(); // throws ExceptionTypeB
...
} catch (ExceptionTypeB e) {
// do something about condition A
}
try {
...
z.method3(); // throws ExceptionTypeC
...
} catch (ExceptionTypeC e) {
// do something about condition C
}
try {
...
x.method4(); // throws ExceptionTypeA
...
} catch (ExceptionTypeA e) {
// do something about condition A
}
Điều này có vẻ thực sự khó chịu. Trong những trường hợp như thế này, tôi đã coi là làm một cái gì đó như sau:
private void doSomething() throws exceptionTypeA, exceptionTypeB, exceptionTypeC {
...
x.method1(); // throws ExceptionTypeA
...
y.method2(); // throws ExceptionTypeB
...
z.method3(); // throws ExceptionTypeC
...
x.method4(); // throws ExceptionTypeA (again)
...
}
public void doSomething_andHandleErrors() {
try {
this.toSomething();
} catch (ExceptionTypeA e) {
// do something about condition A
} catch (ExceptionTypeB e) {
// do something about condition B
} catch (ExceptionTypeC e) {
// do something about condition C
}
}
... và sau đó doSomething_andHandleErrors chỉ cần gọi(); từ bên ngoài. Đây có phải là một thực hành 'tốt' không? Tôi có rơi vào một số mẫu không?
Cảm ơn!
Tôi sẽ chuyển điều này đến http://codereview.stackexchange.com –