这是今天与同事讨论时提出的。
Java 的 JavadocsIllegalStateException
声明它:
表示方法已在非法或不适当的时间被调用。换言之,Java 环境或 Java 应用程序未处于请求操作的适当状态。
Effective Java 说(第 60 条,第 248 页):
另一个常用的异常是 IllegalStateException。如果由于接收对象的状态而调用非法,这通常是抛出的异常。例如,如果调用者在正确初始化之前尝试使用某个对象,这将是抛出的异常。
这里似乎有点不一样。javadocs 的第二句话听起来像是异常可以描述有关 Java 执行状态的非常广泛的条件,但 Effective Java 中的描述使它听起来像是用于与对象状态相关的条件方法已被调用。
我在 JDK(例如集合Matcher
)和 Guava 中看到的用法肯定属于 Effective Java 所谈论的类别(“此对象处于无法调用此方法的状态”)。这似乎也与IllegalStateException
's兄弟相一致IllegalArgumentException
。
IllegalStateException
JDK 中是否存在与“Java 环境”或“Java 应用程序”相关的合法用途?或者是否有任何最佳实践指南提倡将其用于更广泛的执行状态?如果不是,那为什么 javadocs 会这样写呢?;)