Có bất cứ điều gì giống như .NET NotImplementedException
trong Java không?
Có bất cứ điều gì giống như .NET NotImplementedException
trong Java không?
Câu trả lời:
Commons Lang có nó. Hoặc bạn có thể ném một UnsupportedOperationException
.
Tôi nghĩ rằng java.lang.UnsupportedOperationException
là những gì bạn đang tìm kiếm.
new UnsupportedOperationException("Not implemented yet")
- Hạnh phúc không?
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 :)
UnsupportedOperationException
theo ý 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!
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 UnsupportedOperationException
như đượ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:
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 UnsupportedOperationException
nó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.import
dòng (JDK 9 đã sửa lỗi này ).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.