Điều này được đưa ra trong một cuộc thảo luận với một đồng nghiệp ngày hôm nay.
Javadocs cho Java IllegalStateException
nói rằng nó:
Báo hiệu rằng một phương pháp đã được gọi vào một thời điểm bất hợp pháp hoặc không thích hợp. Nói cách khác, môi trường Java hoặc ứng dụng Java không ở trạng thái thích hợp cho hoạt động được yêu cầu.
Và Java hiệu quả nói (Mục 60, trang 248):
Một ngoại lệ thường được sử dụng lại khác là IllegalStateException. Đây thường là ngoại lệ để ném nếu lời gọi là bất hợp pháp vì trạng thái của đối tượng nhận. Ví dụ, đây sẽ là ngoại lệ để ném nếu người gọi cố gắng sử dụng một số đối tượng trước khi nó được khởi tạo đúng cách.
Có vẻ như có một chút khác biệt ở đây. Câu thứ hai của javadocs làm cho nó giống như ngoại lệ có thể mô tả một điều kiện rất rộng về trạng thái thực thi Java, nhưng mô tả trong Java hiệu quả làm cho nó giống như nó được sử dụng cho các điều kiện liên quan cụ thể đến trạng thái trạng thái của đối tượng có phương thức đã được gọi.
Các cách sử dụng mà tôi đã thấy trong JDK (ví dụ: bộ sưu tập, Matcher
) và trong Guava dường như chắc chắn thuộc loại mà Java hiệu quả nói về ("Đối tượng này ở trạng thái không thể gọi phương thức này"). Điều này cũng có vẻ phù hợp với IllegalStateException
anh chị em của ' IllegalArgumentException
.
Có bất kỳ IllegalStateException
cách sử dụng hợp pháp nào trong JDK liên quan đến "môi trường Java" hoặc "ứng dụng Java" không? Hoặc có bất kỳ hướng dẫn thực hành tốt nhất nào ủng hộ việc sử dụng nó cho trạng thái thực thi rộng hơn không? Nếu không, tại sao các javadocs lại được viết như vậy? ;)
In Java, an exception that occurs when using multiple threads, whereby one thread modifies an object in a way that makes it incompatible with the use of that object in the second thread, thus putting the object into an illegal state.
. Huh? Trường hợp nào này đến từ đâu?