Ngoại lệ tiêu chuẩn để ném vào Java cho các hoạt động không được hỗ trợ / triển khai là gì?


308

Cụ thể, có một Exceptionlớp con tiêu chuẩn được sử dụng trong những trường hợp này?


Có thích hợp để sử dụng khi một lớp không thực hiện một phương thức, nhưng các lớp con có thể làm như vậy không? Nói cách khác, để có một phương thức trừu tượng trong một lớp không trừu tượng.
osa

@SergeyOrshanskiy Nó hữu ích khi, tùy thuộc vào cách bạn xây dựng một đối tượng, bạn cần tạo một lớp ẩn danh thực hiện một giao diện để khởi tạo một biến thành viên, nhưng bạn không muốn nó được sử dụng. Nếu bạn đặt nó nullvà bạn vô tình sử dụng nó (hoặc người khác đã làm), bạn sẽ nhận NullPointerExceptionsđược ít rõ ràng hơn UnsupportedOperationExceptionstrong trường hợp này. Chỉ là một ví dụ.
2rs2ts

Câu trả lời:


438

java.lang.UnsupportedOperationException

Ném để chỉ ra rằng các hoạt động được yêu cầu không được hỗ trợ.


4
@JarrodRoberson OK, câu lệnh đó thực sự cần được xóa khỏi tài liệu lớp trong trường hợp đó. Các ngoại lệ dường như được sử dụng bởi các gói khác. Tôi đoán nếu Oracle làm như vậy, thì chúng ta cũng nên như vậy. Tôi sẽ nộp báo cáo lỗi.
Maarten Bodewes

1
Hãy nhận biết đây là một không được kiểm tra RuntimeException . Bạn sẽ không nhận được phản hồi hoặc hỗ trợ nào trong việc xử lý các ngoại lệ này trong thời gian biên dịch. Nếu phương pháp này được sử dụng cho phương pháp sơ khai hoặc tiến trình công việc, bạn nên sử dụng một số loại ngoại lệ được kiểm tra .
TastyWheat

221

Phân biệt giữa hai trường hợp bạn đặt tên:

  • Để chỉ ra rằng hoạt động được yêu cầu không được hỗ trợ và rất có thể sẽ không bao giờ, hãy ném một UnsupportedOperationException.

  • Để chỉ ra thao tác được yêu cầu chưa được thực hiện, hãy chọn giữa:

    1. Sử dụng NotImplementedExceptiontừ apache commons-lang đã có sẵn trong commons-lang2 và đã được thêm lại vào commons-lang3 trong phiên bản 3.2.

    2. Thực hiện của riêng bạn NotImplementedException.

    3. Ném UnsupportedOperationExceptionmột thông điệp như "Chưa được thực hiện".


1
Tôi đang đi với điều này, bởi vì nó có vẻ hợp lý với tôi. "Tuy nhiên" hoặc "không bao giờ" được chỉ ra bởi Ngoại lệ đưa ra ý tưởng về cách phản ứng về vấn đề này.
sschrass

3
# 1 hoặc 2 được ưu tiên rất nhiều trong thực tế. # 3 không nắm bắt được sự khác biệt về ngữ nghĩa giữa "không được hỗ trợ" và "không được triển khai", nhưng việc có một lớp riêng biệt giúp tìm kiếm nhanh hơn để xác minh rằng bạn đã quên thực hiện bất cứ điều gì bạn nên làm trước khi cam kết.
Sean U

4
# 3 là tốt nhất cho các phương thức không được triển khai vì nó không yêu cầu thư viện của bên thứ ba hoặc công việc bổ sung, ngay cả khi đó là commons-lang.
JoshDM

28

Nếu bạn tạo một hàm mới (chưa được triển khai) trong NetBeans , thì nó sẽ tạo ra một thân phương thức với câu lệnh sau:

throw new java.lang.UnsupportedOperationException("Not supported yet.");

Do đó, tôi khuyên bạn nên sử dụng UnsupportedOperationException .


14

Nếu bạn muốn độ chi tiết cao hơn và phân tách tốt hơn, bạn có thể sử dụng NotImcellenceedException từ commons-lang

Cảnh báo: Chỉ có sẵn trước phiên bản 2.6 và sau phiên bản 3.2.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.