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