我担心这是运行时异常,因此应谨慎使用。
标准用例:
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
。似乎不应该使用它,我们应该坚持我们自己的检查异常。有什么好的用例来抛出这个?