【发布时间】:2018-07-22 00:34:46
【问题描述】:
让我们从 Javadocs 开始:
表示方法已被非法或不适当地调用 时间。换句话说,Java 环境或 Java 应用程序不是 处于请求操作的适当状态。
抛出表明一个方法已经被非法或 不恰当的论点。
上面的问题是它们非常黑白。考虑一个方法正在解析调用者提供的文件的用例。该文件存在、可读且格式正确。但是,文件中的某些内容不符合业务规则。在这种情况下抛出什么合适的异常 - IllegalStateException 或 IllegalArgumentException?
查看提供断言的各种库,例如 Guava Preconditions 或 Spring Assert,似乎没有达成共识。有一些很好的讨论 here 和 here,但没有一个对我上面提到的常见用例提供结论性的答案。
【问题讨论】:
-
很抱歉,对此没有正确答案。做到这一点的“正确”方式是见仁见智......正如下面矛盾的答案和不合时宜的投票模式所清楚说明的那样。显然,没有“决定性”的答案。
-
(FWIW,我的观点是“两者都不是”......在这种情况下。但我同意那些说这两个例外是指正交事物的人。一个是关于通过的论点。另一个是关于调用时目标对象的状态(不是参数)。区别很明确。)
标签: java exception illegalstateexception illegalargumentexception