我有一个方法getUser,它从数据库中检索用户.该方法要求您验证用户是否确实存在(通过userExists(String username)方法.
如果调用了getUser方法并且用户不存在,我想抛出一个未经检查的异常,但是哪个异常最合适呢?我想到了IllegalArgumentException,但它感觉不完全正确,因为在某些情况下某些输入可能没问题,但在其他情况下则不然 – 它们并非严格“非法”.有什么建议?
解决方法
对我来说IllegalArgumentException意味着该论点是非法的,并且总是非法的.我将使用的异常是IllegalStateException来说明检查用户无效的对象的状态.
但是,您可能有一个特定的例外,您可以创建自己的例外.
public class UsernameNotCheckedException extends IllegalStateException { public UsernameNotCheckedException(String message) { super(message); } }
这可以使调试更容易.
NumberFormatException是IllegalArgumentException的子类.如果您尝试解析数字12QW4,它将为您提供NumberFormatException,并且您无法做任何事情以使其稍后成为有效参数.即它与任何事物的状态无关.
IllegalStateException的Javadoc状态.
Signals that a method has been invoked at an illegal or inappropriate time. In other words,the Java environment or Java application is not in an appropriate state for the requested operation.