没有调用先决条件方法时抛出什么异常?

Ami*_*hum 6 java exception

我有一个getUser从数据库中检索用户的方法.该方法要求您验证用户是否确实存在(通过该userExists(String username)方法.

如果getUser调用该方法并且用户不存在,我想抛出一个未经检查的异常,但哪个异常最合适呢?我想过IllegalArgumentException,但感觉并不完全正确,因为在某些情况下某些输入可能没问题,但其他情况则不然 - 它们并非严格"非法".有什么建议?

Pet*_*rey 13

对我来说IllegalArgumentException意味着该论点是非法的,并且总是非法的.我将使用的异常是IllegalStateException来说明检查用户无效的对象的状态.

但是,您可能有一个特定的例外,您可以创建自己的例外.

public class UsernameNotCheckedException extends IllegalStateException {
    public UsernameNotCheckedException(String message) {
        super(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以使调试更容易.

A NumberFormatException是的子类IllegalArgumentException.如果你试图解析12QW4它会给你一个数字,NumberFormatException你可以做任何事情以使其成为一个有效的论据.即它与任何事物的状态无关.

国家的Javadoc IllegalStateException.

表示在非法或不适当的时间调用了方法.换句话说,Java环境或Java应用程序未处于所请求操作的适当状态.

  • 比我的回答更好,更完整,1 +.将删除我的答案. (2认同)
  • 添加了有关简化调试的注释.;) (2认同)