2016-05-04 18 views
7

Tôi nhận thấy gần đây rằng Exception có một số hàm tạo có tham số Throwable. Throwable có hai lớp con, ErrorException và nói chung tất cả tài liệu chỉ ra rằng bạn không nên cố bắt hoặc xử lý Error. Do đó, tôi tò mò tại sao Exception mất một tham số Throwable làm tham số hàm tạo thay vì một số Exception. Điều này ngụ ý rằng một số Exception có thể được tạo với Error làm nguyên nhân và có thể được ứng dụng xử lý. Tại sao điều này là trường hợp?Tại sao ngoại lệ lấy Throwable làm tham số hàm tạo thay vì Ngoại lệ?

Nên tùy chỉnh Exception các lớp học sau đó chỉ cung cấp các nhà thầu mất Exception làm thông số?

+0

Chỉ cần đoán: đôi khi mọi người vẫn cố gắng đăng nhập ngoại lệ bằng cách nào đó; và có thể điều đó dễ dàng hơn nếu bạn sử dụng một số ngoại lệ loại tùy chỉnh của riêng mình; và vì vậy bạn cho phép những thứ như vậy được quấn quanh một chiếc Throwable. Hoặc có thể, ngôn ngữ papas và mamas chỉ không nghĩ rằng một thông qua. – GhostCat

+0

JAVADOC syas: * "Lỗi là một phân lớp của Throwable cho thấy các vấn đề nghiêm trọng mà một ứng dụng hợp lý không nên cố gắng nắm bắt. Hầu hết các lỗi như vậy là điều kiện bất thường." * Nhưng nó không cấm bạn bắt chúng. – user2004685

Trả lời

3

Tôi đoán đó là cơ bản vì:

  1. nó không được khuyến khích để xử lý một Error nhưng nó không cấm.

  2. thực tiễn tốt là lập trình cho giao diện, vì vậy loại tham số phải hỗ trợ phạm vi loại rộng nhất bằng cách có giao diện gốc Throwable.

2

IMHO, Exception Lớp mất Throwable như tham số, bởi vì một số thư viện hoặc các API có thể tạo kiểu riêng của họ mà kéo dài Throwable, và sau đó xử lý ngoại lệ của bạn cần để có thể đối phó với những người là tốt. Ngoài ra, bạn có thể throw một Throwable không nhất thiết là ngoại lệ, Điều này làm cho nó rất dễ dàng để ném một cái gì đó mà là một loại tùy chỉnh thất bại chương trình, và dựa trên đó nó sẽ có mức độ 'phục hồi'.

Đối với các lớp Ngoại lệ tùy chỉnh của bạn, tôi nghĩ nó phụ thuộc vào mức chi tiết bạn cần khi xử lý ngoại lệ, hầu hết các trường hợp thông thường sẽ xử lý một cách duyên dáng Throwable s, vì bạn không thể phục hồi do lỗi, nhưng bạn vẫn thông báo cho người dùng điều đó đã xảy ra.

Các vấn đề liên quan