gpt4 book ai didi

java - 什么时候应该抛出 IllegalArgumentException?

转载 作者:IT老高 更新时间:2023-10-28 11:35:11 26 4
gpt4 key购买 nike

我担心这是一个运行时异常,所以应该谨慎使用它。
标准用例:

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 .似乎不应该使用它,我们应该坚持我们自己的检查异常。抛出这个的好用例是什么?

最佳答案

IllegalArgumentException 的 API 文档:

Thrown to indicate that a method has been passed an illegal or inappropriate argument.

从查看 how it is used in the JDK libraries ,我会说:

  • 在输入进入工作之前提示明显错误的输入似乎是一种防御措施,并导致某些事情在中途失败并显示无意义的错误消息。

  • 它用于抛出受检异常太烦人的情况(尽管它出现在 java.lang.reflect 代码中,在这种情况下,不会担心抛出受检异常的荒谬程度明显)。

我会使用 IllegalArgumentException 对常用实用程序进行最后的防御性参数检查(试图与 JDK 的用法保持一致)。或者期望错误参数是程序员错误,类似于 NullPointerException。我不会用它来实现业务代码中的验证。我当然不会将它用于电子邮件示例。

关于java - 什么时候应该抛出 IllegalArgumentException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com