在集合方法中抛出的最佳异常
如果我有一个设置的方法,我想修改一些值,如果用户输入了错误的值,这是最好的异常来表明失败?
public void setSomething(int d) throws ....
{
if (d < 10 && d >= 0)
{
// ok do something
}
else throw new ... // throw some exception
}
如果我有一个设置的方法,我想修改一些值,如果用户输入了错误的值,这是最好的异常来表明失败?
public void setSomething(int d) throws ....
{
if (d < 10 && d >= 0)
{
// ok do something
}
else throw new ... // throw some exception
}
我会选择TraviralArgumentException。
抛出以指示方法已通过非法或不适当的参数。
编辑
另一个注意事项:
而不是
if (conditionIsTrue) {
doThis();
doThat();
} else {
throw new IllegalArgumentException();
}
写:
if (conditionNotTrue) {
throw new IllegalArgumentException();
}
doThis();
doThat();
(虽然这个建议可能会引起争议;-))。
我同意@Code Monkey关于创建自己的InvalidArgumentException的观点,但他的实现并没有显示出它提供的所有优势。
1)您可以添加方便的方法来简化参数检查。例如:
InvalidArgumentException.throwIfNullOrBlank(someString, "someString");
与。
if (someString == null || someString.trim().isEmpty()) {
throw new IllegalArgumentException("someString is null or blank");
}
2) 您可以编写单元测试来确认哪个参数无效。如果你抛出 IllegalArgumentException,你的单元测试无法确认它是由于你期望它被抛出的原因而抛出的。你甚至不能说它是由你自己的代码抛出的。
try {
someClass.someMethod(someValue);
Assert.fail("Should have thrown an InvalidArgumentException");
} catch (InvalidArgumentException e) {
Assert.assertEquals("someValue", e.getArgumentName());
}
3)你可以分辨出异常是从你自己的代码中引发的。(这是一个小问题,没有太多的实际优势)