Trường hợp ngoại lệ được kiểm tra nhằm mục đích sử dụng trong trường hợp một phương pháp có thể mong đợi người gọi của nó được chuẩn bị để đối phó với một số vấn đề có thể phát sinh. Nếu người gọi của BaseFoo.Bar()
không bắt buộc phải đối phó với FnordException
thì phương pháp DerivedFoo.Bar()
không thể mong đợi người gọi của mình đối phó với số FnordException
hoặc (vì nhiều người gọi của nó sẽ là những người không được chuẩn bị để có BaseFoo.Bar()
ném nó).
Về mặt khái niệm, điều đó thật tuyệt. Trong thực tế, không quá nhiều. Vấn đề là thiết kế ngoại lệ đã kiểm tra trong ngôn ngữ giả định rằng không có người gọi nào được chuẩn bị để đối phó một cách duyên dáng với một vấn đề cụ thể hoặc tất cả người gọi sẽ được chuẩn bị để đối phó với nó. Trạng thái bình thường của các vấn đề trong thực tế là cho người gọi không chuẩn bị để đối phó với ngoại lệ - ngay cả những người mà một số người gọi có thể xử lý. Hầu hết thời gian, quá trình thích hợp của hành động khi mã nhận được một ngoại lệ được kiểm tra nó không rõ ràng mong đợi sẽ được bọc nó trong một ngoại lệ không được kiểm soát và ném đó. Trớ trêu thay, quá trình hành động đơn giản nhất - thêm một mệnh đề "ném" và để cho bong bóng ngoại lệ được kiểm tra lên, có lẽ là một trong số đó ít có khả năng là chính xác. Trong khi có một vài trường hợp (ví dụ: IOException
), khi hành vi này có ý nghĩa (ví dụ: khi cố gắng đọc bộ sưu tập từ tệp, lỗi I/O khi đọc một mục là lỗi I/O khi đọc bộ sưu tập), ngoại lệ được ném từ bên trong một cuộc gọi phương thức lồng nhau sẽ đại diện cho một điều kiện khác với ngoại lệ của cùng loại được ném bởi phương thức bên ngoài và mã sẽ được chuẩn bị để xử lý sau có thể không được chuẩn bị để xử lý trước.
Trong trường hợp của bạn, đặt cược tốt nhất của bạn có thể là bắt IOException
và bọc nó ở một số loại khác có nguồn gốc từ RuntimeException
, lưu ý rằng người gọi của bạn không thể xử lý được.
Vui lòng hiển thị cho chúng tôi mã hoàn chỉnh trình bày sự cố. Bao gồm cả tên lớp đủ điều kiện cho 'Exception' (s) của bạn. –
bạn có thể hiển thị thêm một chút mã của mình và lỗi chính xác mà bạn đang gặp phải không? – aniri
Công trình mỏ. Bạn nên cho chúng ta thấy nhiều mã hơn thế. – Averroes