gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:12:33 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/60439988/

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