Tôi đang làm việc với API tuyên bố trả về true nếu thành công và giả mạo nếu không thành công. Nhưng, nó cũng tuyên bố ném các ngoại lệ khác nhau nếu nó không thành công. Làm thế nào nó có thể trả về sai và ném một ngoại lệ?Trả về một giá trị VÀ ném một ngoại lệ?
Trả lời
Không thể ném cả ngoại lệ và trả về giá trị từ một cuộc gọi chức năng duy nhất.
Có thể nó hoạt động giống như trả lại false
nếu có lỗi, nhưng sẽ ném ngoại lệ nếu đầu vào không hợp lệ.
chỉnh sửa: PaulPRO đăng tải một câu trả lời (nay là phần tử bị xoá) chỉ ra rằng nó là kỹ thuật thể gây ra một ngoại lệ được ném vào một chủ đề khác nhau, trong khi trả lại một giá trị trong hiện tại. Tôi nghĩ điều này đáng chú ý, ngay cả khi đó không phải là điều bạn nên thấy.
Bạn có thể ném một ngoại lệ mà có một (trong trường hợp này boolean) giá trị:
public class ValueException extends Exception {
final boolean value;
public ValueException(boolean value, String message) {
super(message);
this.value = value;
}
public boolean getValue() {
return value;
}
}
Mặc dù có thể viết mã của bạn trong một cách mà một ngoại lệ và giá trị có thể được bắt nguồn từ một cuộc gọi chức năng (xem các bài viết trên), nó KHÔNG BAO GIỜ được thực hiện trong mã hóa thích hợp.
Tôi rất muốn thấy liên kết đến tài liệu trên API này. API nên đặt ưu tiên cho sự rõ ràng. Ném một ngoại lệ và trả về một giá trị để lại câu hỏi liệu giá trị đã trả lại có an toàn để sử dụng hay không nếu nó không hợp lệ.
Hãy nhớ rằng, khối try/catch là phương thức xử lý ngoại lệ KHÁC. Chúng không vượt qua ngoại lệ đối với phương thức gọi, nhưng xử lý nó theo cách nội bộ theo cách mà nhà phát triển thấy phù hợp.
Nếu, vì mục đích gỡ lỗi, bạn cần xem giá trị kết quả trong trường hợp ngoại lệ, ý tưởng của Bohemian hoạt động tốt.
- 1. Phương pháp tĩnh có thể trả về một giá trị ném một ngoại lệ?
- 2. Ném một ngoại lệ hoặc trả về null
- 3. Rhino Mocks Lỗi: Phương pháp trước 'IEnumerator.MoveNext();' đòi hỏi một giá trị trả về hoặc một ngoại lệ để ném
- 4. Cung cấp giá trị trên 'System.Windows.Markup.StaticResourceHolder' ném một ngoại lệ
- 5. Ném ngoại lệ so với giá trị null trả về bằng lệnh chuyển đổi
- 6. RSpec thử lại ném ngoại lệ và sau đó trở về giá trị
- 7. Làm thế nào để làm cho một giả ném một ngoại lệ lần đầu tiên và trả về một giá trị thứ hai
- 8. Việc ném một ngoại lệ trong một phương thức có khiến phương thức trả về không?
- 9. Khi trả lại bool, hãy ném ngoại lệ và ngoại lệ nào để ném
- 10. Trả lại sau khi ném ngoại lệ
- 11. Ném ngoại lệ và trả lại kết quả từ hàm
- 12. tuyên bố một phương pháp luôn ném một ngoại lệ?
- 13. Ném một ngoại lệ từ std :: call_once
- 14. Bối rối về khi nào nên ném một ngoại lệ
- 15. Perl ngoại lệ thay vì trả lại giá trị
- 16. Có cách nào để lấy giá trị String của một HttpEntity khi EntityUtils.toString() trả về một ngoại lệ không?
- 17. Tôi có nên trả về null hoặc ném một ngoại lệ không?
- 18. LLVM ngoại lệ ném
- 19. Kiểm soát luồng Ruby: ném một ngoại lệ, trả về 0 hoặc để nó thất bại?
- 20. Tại sao HttpWebRequest lại ném một ngoại lệ thay vì trả về HttpStatusCode.NotFound?
- 21. Điều gì xảy ra với giá trị trả về sau khi ngoại lệ được ném vào khối cuối cùng?
- 22. Ném và bắt ngoại lệ
- 23. Trả về một giá trị trong Pascal
- 24. Trả về một giá trị với psycopg2
- 25. Thủ công ném một ngoại lệ
- 26. Có thể Monitor.Enter ném một ngoại lệ?
- 27. Tái ném một ngoại lệ đích InvocationTargetException
- 28. Một Runnable có thể trả về một giá trị không?
- 29. ném mới std :: ngoại lệ vs ném std :: ngoại lệ
- 30. So sánh NaN và trả về rỗng illogic giá trị
Đó là những gì tôi đã tìm. Tôi nghĩ rằng có thể có một số thủ thuật với một khối cuối cùng mặc dù. – mark
một khi ngoại lệ được ném chương trình của bạn ngừng chạy để imho nó không thể làm cả hai. Tôi tự hỏi nếu bạn có câu lệnh trả về trong khối 'try' của mình, chương trình vẫn chuyển khối 'cuối cùng' hay không, bởi vì nếu bạn trả về một giá trị trong khối try và đặt một ngoại lệ ném vào khối cuối cùng bạn sẽ đã thực hiện cả hai .. –
@ Karel-Jan Misseghers: không, trong Java chương trình của bạn không ** DEFINITELY NOT ** ngừng chạy khi một ngoại lệ được ném. Bạn đang bối rối như thế nào ngoại lệ Java làm việc và rõ ràng đã không thực hiện bất kỳ lập trình Java đa luồng nào được nêu ra. Bạn có thể có rất nhiều chủ đề vui vẻ tiếp tục làm việc khi một ngoại lệ không được kiểm tra xảy ra trong một chuỗi khác. Có rất nhiều trường hợp mà thread chết được tự động khởi động lại (cái nổi tiếng nhất là EDT của Swing trên một số hệ điều hành/JVM: nếu EDT chết, một EDT mới được khởi động lại). – SyntaxT3rr0r