Tôi nên ném ngoại lệ nào khi phương thức nhà máy tĩnh không khởi tạo được đối tượng mới? Tôi thích đưa ra một ngoại lệ có ý nghĩa hơn là trả lại null
.Java: Ngoại lệ thích hợp cho lỗi khởi tạo
Trả lời
Nếu bạn đang ném ngoại lệ trong Nhà máy do không đủ dữ liệu, tôi muốn ném một số IllegalStateException
với mô tả tương tự như "không thể xây dựng X, không có Y nào được đặt".
Nếu bạn đang ném ngoại lệ trong Nhà máy do dữ liệu xung đột, tôi muốn ném IllegalStateException
với mô tả tương tự "không thể xây dựng xung đột X, Y với Z".
Nếu bạn đang ném ngoại lệ trong Nhà máy do giá trị xấu (hoặc vô nghĩa), tôi muốn ném một IllegalArgumentException
với mô tả tương tự như "Y không thể là A".
Nếu bạn đang ném một ngoại lệ trong Nhà máy do thiếu giá trị, tôi muốn ném một IllegalArgumentException
với mô tả tương tự như "Y không thể rỗng".
Tùy chọn cuối cùng tùy thuộc vào một số tranh luận. Một số người cho rằng tốt hơn là nên ném một NullPointerException
; trong trường hợp của tôi, chúng tôi tránh chúng ở tất cả các chi phí vì nhiều khách hàng có xu hướng không đọc thông báo ngoại lệ (và giả định rằng NullPointerException có nghĩa là một lỗi mã hóa).
Trong mọi trường hợp, bạn nên cung cấp thông điệp tốt, cụ thể về lý do ngoại lệ được ném, để giảm chi phí hỗ trợ trong tương lai của bạn khi thấy ngoại lệ đó tăng lên vài tháng kể từ bây giờ.
Bạn có thể tạo ngoại lệ của riêng bạn bằng cách mở rộng lớp Exception
Không có ngoại lệ tích hợp cho trường hợp này? Đó là một kịch bản khá phổ biến. –
Tôi khó có thể gọi một nhà xây dựng ném một ngoại lệ là một trường hợp phổ biến – Woot4Moo
Có rất nhiều ngoại lệ nhưng sẽ linh hoạt hơn nếu có thông điệp tùy chỉnh của riêng bạn nếu cần –
Something như thế này có lẽ chỉ nên là một Khẳng định, nhưng nếu có trong thực tế, khả năng này thất bại thì một ngoại lệ tùy chỉnh mà có ý nghĩa đối với bạn sẽ là sự lựa chọn của tôi.
Lý tưởng nhất là bạn muốn mở rộng Exception
và tự tạo IntializatonException
của riêng mình.
Vâng, nguyên nhân của sự cố là đặt cược tốt nhất của bạn. Nếu các đối số không OK, bạn có thể ném IllegalArgumentException, nếu một số tệp không có ở đó, bạn có thể ném FileNotFoundException, nếu nhà máy không được khởi tạo đúng cách, bạn có thể ném IllegalStateException, v.v ...
Tuy nhiên, việc tạo Ngoại lệ của riêng bạn thật dễ dàng. Chỉ cần khai báo lớp của bạn là extends Exception
và thêm các hàm tạo ủy nhiệm. Nếu bạn mở rộng Ngoại lệ, thì phương thức có thể ném nó phải được khai báo với throws
. Nếu bạn không muốn điều đó, bạn có thể mở rộng RuntimeException, những thứ đó không cần khai báo.
- 1. ngoại lệ trong lỗi trình khởi tạo
- 2. Ngoại lệ: loại khởi tạo cho 'system.data.sqlclient.sqlconnection'?
- 3. Loại khởi ngoại lệ
- 4. Ngoại lệ Java và Ngoại lệ C++
- 5. Lỗi ngoại lệ Java - Sqlite prepareStatement.setBlob
- 6. Mã lỗi trong trường hợp ngoại lệ so với trường hợp ngoại lệ hierarhy
- 7. Có thích hợp để ném ngoại lệ từ CoerceValueCallback
- 8. Phương pháp in Python ngoại lệ thích hợp là gì?
- 9. Trường hợp ngoại lệ được kiểm tra và khối khởi tạo
- 10. Ngoại lệ khởi tạo loại khung thực thể
- 11. Cách thích hợp để tăng ngoại lệ trong python?
- 12. Ngoại lệ trong các trường hợp ngoại lệ trong C++
- 13. OpenCV Java ngoại lệ
- 14. Khởi tạo các vals có thể ném một ngoại lệ
- 15. after_filter cho trường hợp ngoại lệ
- 16. Các lớp ngoại lệ Java
- 17. Mùa xuân - bắt đậu tạo ngoại lệ
- 18. java "không thể so sánh" ngoại lệ?
- 19. Viết ngoại lệ cho tệp
- 20. `Khởi tạo không tham chiếu` không hợp lệ là gì?
- 21. Lỗi java Sự kiện lỗi khởi tạo EventBus
- 22. Lỗi ngoại lệ PHPMailer
- 23. @Webservice chú thích ngoại lệ trên weblogic
- 24. Tạo tên tệp hợp lệ trong Java
- 25. Lỗi khởi động ứng dụng Java EE
- 26. Trình khởi tạo kiểu cho 'NHibernate.LoggerProvider' đã ném một ngoại lệ
- 27. Trường hợp ngoại lệ phù hợp để ném khi xảy ra lỗi phân tích cú pháp?
- 28. Java ImageIO: Ngoại lệ Weirdness
- 29. lỗi: khởi tạo không hợp lệ tham chiếu loại 'int &' từ biểu thức loại 'const int'
- 30. Java - Ngoại lệ JSON Null
Điều đó phụ thuộc vào nguyên nhân gây ra lỗi, ví dụ: sự cố mạng, lỗi đọc tệp, v.v. – Viruzzo
Bạn có nghĩa là tôi chỉ nên ném bất kỳ ngoại lệ nào mà tôi nhận được trong quá trình khởi tạo? –
Không nhất thiết, nhưng ngoại lệ của bạn nên có ý nghĩa trong việc cho biết điều gì đã xảy ra, không chỉ là điều gì đó * đã xảy ra. – Viruzzo