我担心这是一个运行时异常,所以应该谨慎使用它。
标准使用案例:何时应抛出IllegalArgumentException?
void setPercentage(int pct) {
if(pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
但是,这似乎将迫使下面的设计:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
为了得到它重新成为一个检查异常。
好的,但让我们一起去。如果你输入错误,你会得到一个运行时错误。所以,首先这实际上是一个相当困难的政策来实现均匀的,因为你可以有做的很相反的转换:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
更糟糕的是 - 当检查0 <= pct && pct <= 100
客户端代码可望静态做的,事实并非如此以获取更高级的数据,例如电子邮件地址,或者更糟糕的是,必须对数据库进行检查,因此通常客户端代码无法预先验证。
所以基本上我所说的是我没有看到使用IllegalArgumentException
的有意义的一致性政策。它似乎不应该被使用,我们应该坚持我们自己的检查异常。什么是好的用例来抛出这个?
我认为这个建议“期望是一个糟糕的论点是一个程序员错误”与我所见过的使用方式最为一致,所以接受了这个答案。 – djechlin 2013-03-07 03:22:27