2011-11-01 33 views
10

Tôi đang xem xét mã cho một đồng nghiệp và tôi gặp phải một đoạn mã tương tự như sau:Có phải "ném ngoại lệ" thực hành không tốt?

public X Foo1(Y y) throws Exception { 
    X result = new X(y); 
    result.Foo2(); 
    return result; 
} 

Tôi tin rằng không có nhu cầu throws Exception phần nhưng tôi đang gặp khó khăn biện minh này. Nó có thể có ý nghĩa nếu nó là cụ thể hơn Exception (FileNotFound, NoMemory vv) nhưng vì nó là tôi nghĩ rằng nó là không cần thiết. Ai đó có thể cho tôi một số lý do những vấn đề này có thể gây ra và tại sao nó là thực hành xấu? Hoặc là mã này ok?

Trả lời

26

Tuyên bố throws là một phần của hợp đồng phương thức. Bạn phải luôn là chính xác nhất có thể khi xác định hợp đồng. Giả sử throws Exception là một ý tưởng tồi.

Thật tệ vì cùng một lý do, thực tiễn không tốt khi nói phương thức trả về số Object khi được đảm bảo trả về String.

Hơn nữa, người gọi phương thức nhất thiết phải bắt giữ Exception (trừ khi anh ta muốn tuyên truyền sự xấu xí này) và bắt buộc Exception cũng là một ý tưởng tồi. Xem câu trả lời cho câu hỏi này: Is it a bad practice to catch Throwable?

+3

+1 Tôi có thể nghĩ ra một số lý do thực tế, nhưng câu trả lời này chứa tất cả. – MByD

5

Lực lượng này sử dụng phương pháp này để xử lý các ngoại lệ.

Thậm chí nếu bạn thích sử dụng các ngoại lệ đã kiểm tra (mà tôi không làm), điều này khiến bạn không có thông tin gì về mọi thứ có thể xảy ra. Vì vậy, bạn không thể thực sự xử lý nó một cách có ý nghĩa.

1

Ném khai có nghĩa là: - một cái gì đó bên trong phương pháp của bạn có thể sản xuất như kiểm tra ngoại lệ - phương pháp của bạn không thể hoặc không sẵn sàng để đối phó với nó

Bạn phải sử dụng ngoại lệ cụ thể nhất, và cưỡng lại sự cám dỗ để nhóm không liên quan ngoại lệ để giảm số lượng khai báo ném. Nếu bạn cảm thấy rằng có quá nhiều phương pháp, phương pháp của bạn quá phức tạp và sẽ bị chia nhỏ thành các phương pháp quản lý nhỏ hơn

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