gpt4 book ai didi

java - null 参数的 IllegalArgumentException 或 NullPointerException?

转载 作者:行者123 更新时间:2023-12-03 03:38:24 29 4
gpt4 key购买 nike

我有一个简单的属性设置方法和 null不适合此特定属性。我一直在这种情况下左右为难:我应该扔一个 IllegalArgumentException 吗? ,或 NullPointerException ?从 javadoc 来看,两者似乎都合适。有某种可以理解的标准吗?或者这只是你应该做任何你喜欢做的事情之一,而且两者都是正确的?

最佳答案

由于以下原因,您应该使用 IllegalArgumentException (IAE),而不是 NullPointerException (NPE):

首先,NPE JavaDoc明确列出 NPE 合适的情况。请注意,当 null 使用不当时,所有这些都会由运行时抛出。相比之下,IAE JavaDoc再清楚不过了:“抛出该异常表示已向方法传递了非法或不适当的参数。”是的,就是你!

其次,当您在堆栈跟踪中看到 NPE 时,您会做出什么假设?可能有人取消引用了 null。当您看到 IAE 时,您会假设堆栈顶部的方法的调用者传递了非法值。同样,后一个假设是正确的,前一个假设是误导性的。

第三,由于IAE显然是为了验证参数而设计的,所以你必须假设它是异常的默认选择,那么为什么你会选择NPE呢?当然不是为了不同的行为——你真的希望调用代码从 IAE 中单独捕获 NPE 并因此做一些不同的事情吗?您是否想传达更具体的错误消息?但无论如何,您都可以在异常消息文本中执行此操作,就像处理所有其他不正确的参数一样。

第四,所有其他不正确的参数数据都会是IAE,那为什么不保持一致呢?为什么非法的 null 如此特殊,值得与所有其他类型的非法参数分开处理?

最后,我接受其他答案给出的论点,即部分 Java API 以这种方式使用 NPE。然而,Java API 与从异常类型到命名约定的所有内容都不一致,因此我认为只是盲目地复制 Java API(您最喜欢的部分)并不足以成为覆盖这些其他考虑因素的论据。

关于java - null 参数的 IllegalArgumentException 或 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33680672/

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