Tôi có một hàm lặp lại trong khi làm một cái gì đó có thể ném một ngoại lệ. Có dạng như sau:Ném một danh sách liên kết ngoại lệ trong Java
public void myFunction() throws MyException {
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
throw new MyException(some, stuff, of, mine, ex);
}
}
}
Lỗi gây ra ngoại lệ có thể phục hồi. Nó có thể giống như một lỗi SQL trong một câu lệnh cập nhật duy nhất trong đó vòng lặp while thực thi một loạt các câu lệnh cập nhật. Hoặc lỗi phân tích cú pháp trong một phần dữ liệu duy nhất, trong đó vòng lặp đang xử lý nhiều phần dữ liệu. Tôi cần phải vượt qua các trường hợp ngoại lệ thêm chuỗi để phần GUI của chương trình có thể xử lý nó, xử lý nó và truyền vào lỗi cho người dùng. Nhưng tôi không muốn giết vòng lặp trong chức năng cụ thể này. Những thứ khác mà nó đang làm có thể không hợp lệ. Lỗi gây ra ngoại lệ có thể không gây tử vong cho hàm. Vì vậy, câu hỏi của tôi là: Có thực hành được chấp nhận để xây dựng danh sách các ngoại lệ tùy chỉnh được liên kết (trong đó mỗi ngoại lệ là nút và ngoại lệ được ném là đầu danh sách) và sau đó ném đầu danh sách (nếu có) khi vòng lặp kết thúc?
Có ai từng xem công việc này chưa? Bất cứ ai có thể nghĩ về bất kỳ vấn đề tiềm năng với việc này? Bất cứ ai có thể nghĩ về cách khác, tốt hơn để xử lý vấn đề gốc: sự cần thiết phải vượt qua nhiều ngoại lệ không liên quan với ra khỏi chức năng cho đến khi nó được thực hiện?
Dưới đây là một ví dụ về cách liên kết và ném có thể được thực hiện rất đơn giản:
public void myFunction() throws MyException {
MyException head = null;
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
MyException tmp = new MyException(some, stuff, of, mine, ex);
tmp.next(head);
head = tmp;
}
}
if(head != null)
throw head;
}
Nhân tiện. Ngoài bạn sử dụng một danh sách liên kết ở đây hay không. Có một lớp 'java.util.LinkedList' sẵn sàng để sử dụng, do đó bạn không phải lập trình chức năng của nó bên trong các đối tượng item của bạn (trong trường hợp này là' MyException'). – helios
Tôi biết điều đó. Tôi không nghĩ rằng bạn có thể sử dụng nó trong trường hợp này, bởi vì danh sách cần phải được ném và LinkedList không phải là một throwable. –