Có bất cứ điều gì giống như .NET 'NotImcellenceedException trong Java không?


Câu trả lời:


516

Commons Lang có nó. Hoặc bạn có thể ném một UnsupportedOperationException.


26
Dường như NotIm HiệnedException đã bị xóa khỏi Commons Lang 3.0.
Michael Younkin

13
Tôi nghĩ vì UnsupportedOperationException là một phần của khung bộ sưu tập, nên chỉ được sử dụng nếu nó được sử dụng trong bối cảnh của Bộ sưu tập. Nếu không thì nên sử dụng RuntimeException. docs.oracle.com/javase/7/docs/technotes/guides/collections/iêu
L.Butz

9
@LeonardButz Nó xuất phát từ java.lang: docs.oracle.com/javase/1.5.0/docs/api/java/lang/ trộm
Ravi Wallau

5
@RaviWallau Tôi đã thấy điều này: docs.oracle.com/javase/7/docs/api/java/lang/ trộm Có lớp này là thành viên của Khung công tác bộ sưu tập Java.
L.Butz

3
Nó đã được cài đặt lại trong Commons Lang 3.2: commons.apache.org/proper/commons-lang/javadocs/api-3.2
qwertzguy

289

Tôi nghĩ rằng java.lang.UnsupportedOperationException là những gì bạn đang tìm kiếm.


28
Tôi nói nó là một cái gì đó khá khác nhau. NIE cũng nói rằng nó có thể chưa được triển khai, trong đó UOE nói với tôi rằng nó sẽ không bao giờ ...
Dykam

5
@Dykam, sau đó nó sẽ không phải là NotIm HiệnedYetException?
Yishai

106
@Dykam: new UnsupportedOperationException("Not implemented yet")- Hạnh phúc không?
Michael Borgwardt

3
Tôi không có nghĩa là nó tồi tệ hơn, chỉ có một trường hợp sử dụng khác.
Dykam

6
UnsupportedOperationException mới ("Chưa được triển khai") là một ý tưởng tuyệt vời! :) trong lang3 vì một số lý do tôi không có NotIm HiệnedException nên đây là một giải pháp tuyệt vời
ufk

55

Bạn có thể tự làm điều đó (đó là những gì tôi đã làm) - để không bị làm phiền với việc xử lý ngoại lệ, bạn chỉ cần mở rộng RuntimeException, lớp của bạn có thể trông giống như thế này:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

Bạn có thể mở rộng nó để nhận một tin nhắn - nhưng nếu bạn sử dụng phương thức như tôi (nghĩa là, như một lời nhắc nhở, rằng vẫn còn một cái gì đó để thực hiện), thì thường không cần thêm tin nhắn.

Tôi dám nói, rằng tôi chỉ sử dụng phương pháp này, trong khi tôi đang trong quá trình phát triển một hệ thống, giúp tôi dễ dàng hơn trong việc không theo dõi những phương pháp nào vẫn chưa được thực hiện đúng :)


3
Tôi thích giải pháp này tốt nhất vì nó dễ dàng có một trình xử lý lỗi đặc biệt cho nó, thật dễ dàng để tìm kiếm nó bằng cách tìm tất cả các tham chiếu đến hàm tạo NotImcellenceedException và nó chỉ là một vài dòng mã. Nhưng có một chút bất tiện khi phải khai báo một lớp mới với tệp riêng của nó.
D Coetzee

1
Tôi đồng ý. Điều này là tốt hơn so với việc sử dụng UnsupportedOperationExceptiontheo ý kiến ​​của tôi. Bây giờ, nếu chỉ Java sẽ thêm điều này vào thư viện ngoại lệ chung!
nghiền nát

12

Như đã đề cập, JDK không có kết quả khớp. Tuy nhiên, nhóm của tôi thỉnh thoảng cũng sử dụng một ngoại lệ như vậy. Chúng tôi có thể đã đi theo UnsupportedOperationExceptionnhư được đề xuất bởi các câu trả lời khác, nhưng chúng tôi thích một lớp ngoại lệ tùy chỉnh trong thư viện cơ sở của chúng tôi có các hàm tạo không dùng nữa:

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

Cách tiếp cận này có những lợi ích sau:

  1. Khi độc giả nhìn thấy NotYetImplementedException, họ biết rằng việc triển khai đã được lên kế hoạch và đã bị lãng quên hoặc vẫn đang được tiến hành, trong khi UnsupportedOperationExceptionnói (phù hợp với các hợp đồng thu gom ) rằng một cái gì đó sẽ không bao giờ được thực hiện. Đó là lý do tại sao chúng ta có từ "chưa" trong tên lớp. Ngoài ra, một IDE có thể dễ dàng liệt kê các trang web cuộc gọi.
  2. Với cảnh báo không dùng ở mỗi trang web cuộc gọi, IDE và công cụ phân tích mã tĩnh của bạn có thể nhắc nhở bạn nơi bạn vẫn phải thực hiện một cái gì đó. (Việc sử dụng khấu hao này có thể cảm thấy sai đối với một số người, nhưng trên thực tế phản đối không bị giới hạn trong việc thông báo loại bỏ .)
  3. Các nhà xây dựng bị phản đối, không phải là lớp. Theo cách này, bạn chỉ nhận được cảnh báo khấu hao bên trong phương thức cần triển khai, chứ không phải tại importdòng (JDK 9 đã sửa lỗi này ).

8

Không có không và có lẽ nó không có ở đó, bởi vì có rất ít sử dụng hợp lệ cho nó. Tôi sẽ suy nghĩ hai lần trước khi sử dụng nó. Ngoài ra, nó thực sự dễ dàng để tạo ra chính mình.

Vui lòng tham khảo cuộc thảo luận này về lý do tại sao ngay cả trong .NET.

tôi đoán UnsupportedOperationException đến gần, mặc dù nó không nói rằng hoạt động chỉ là không được thực hiện, nhưng thậm chí không được hỗ trợ. Điều đó có thể ngụ ý không thực hiện hợp lệ là có thể. Tại sao các hoạt động sẽ không được hỗ trợ? Nó thậm chí có nên ở đó? Sự phân biệt giao diện hoặc vấn đề thay thế Liskov có thể?

Nếu công việc đang tiến triển tôi sẽ thực hiện ToBeImplementedException, nhưng tôi chưa bao giờ bắt mình phải xác định một phương pháp cụ thể và sau đó để nó quá lâu, nó sẽ được đưa vào sản xuất và sẽ cần một ngoại lệ như vậy.

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.