2010-01-22 25 views

Trả lời

12

sẽ bị bắt trước tiên - nhưng một loạt các trường hợp ngoại lệ khác. Bạn không nên bắt nhiều hơn bạn thực sự muốn.

Điểm thứ hai tốt hơn nếu bạn thực sự để xem ... nhưng thường là điều này cho biết lỗi trong mã gọi điện. Đôi khi đây là trường hợp của phương pháp khác cao hơn không xác nhận các đối số của nó, v.v. Trong một thế giới lý tưởng, bất kỳ lúc nào mà IllegalArgumentException được ném ra phải có cách để người gọi xác thực giá trị trước khi chuyển nó vào hoặc gọi phiên bản sẽ không thành công theo cách không đặc biệt (ví dụ: mẫu TryParse trong .NET, được thừa nhận khó hơn trong Java mà không có thông số out). Đó không phải lúc nào cũng như vậy, nhưng bất cứ khi nào bạn nhận được IllegalArgumentException, bạn nên kiểm tra xem liệu bạn có có thể tránh không bằng cách kiểm tra các giá trị trước khi gọi phương thức.

0

Nó thực sự phụ thuộc vào trường hợp ở bàn tay, hoặc là chính xác trong chính nó. Nếu không thu hẹp phạm vi của câu hỏi, có một chút khó khăn để đưa ra ví dụ "sử dụng tốt nhất".

3

Bạn nên tránh xa catch (Exception) vì cách đó bạn sẽ bắt được mọi ngoại lệ có thể là. Nếu bạn thực sự chỉ mong đợi số IllegalArgumentException và xử lý trường hợp đó, bạn không nên mở rộng phạm vi đó; tốt hơn hãy thêm nhiều khối catch hơn cho các loại ngoại lệ khác, sau đó.

7

Bạn không nên xử lý IllegalArgumentException. Đó là porpose là để thông báo cho các nhà phát triển, rằng ông đã gọi một phương pháp với các đối số sai. Giải pháp là, để gọi phương thức với các đối số khác.

Nếu bạn phải nắm bắt nó, bạn nên sử dụng

catch(IllegalArgumentException e) 
+0

Trừ khi thư viện mà ném nó cần phải kiểm tra lại ngoại trừ ở một mức độ cao hơn trước khi nó thoát lên phía trên để người gọi. – tar

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