Java 对象的用途是什么?requireNonNull

Java 对象的用途是什么?requireNonNull,java,Java,在检查了我想使用的方法后,requiredNonNull,我偶然发现了第一个方法,它只有一个参数(T obj) 然而,使用此签名的特定方法的实际用途是什么?它所做的只是抛出和NPE,我有点积极(作为一个例子,我可能在这里遗漏了一些明显的东西)无论如何都会抛出 抛出: NullPointerException-如果obj为null 后者实际上在调试某些代码方面是有意义的,正如文档中所述,它主要是为参数验证而设计的 公共静态T requirennull(T obj,字符串消息) 检查指定的对象引用

在检查了我想使用的方法后,
requiredNonNull
,我偶然发现了第一个方法,它只有一个参数
(T obj)

然而,使用此签名的特定方法的实际用途是什么?它所做的只是抛出和NPE,我有点积极(作为一个例子,我可能在这里遗漏了一些明显的东西)无论如何都会抛出

抛出: NullPointerException-如果obj为null


后者实际上在调试某些代码方面是有意义的,正如文档中所述,它主要是为参数验证而设计的

公共静态T requirennull(T obj,字符串消息)

检查指定的对象引用是否为null,如果为null,则抛出自定义的NullPointerException

因此,我可以将特定信息与NPE一起打印,以使调试更加容易


考虑到这一点,我非常怀疑我是否会遇到这样的情况:我宁愿使用前者。请一定要开导我


tl;dr-为什么要使用不接收消息的重载。

编写软件时的一个好原则是尽早捕获错误。例如,您越快注意到传递给方法的错误值(如
null
)越容易找到原因并解决问题

如果您将
null
传递给一个不应该接收
null
的方法,您已经注意到,
NullPointerException
可能会在某个地方发生。然而,只有在更深层的一些方法中才会发生异常,当异常发生在深层的某个地方时,就更难找到错误的确切来源

因此,当方法预先检查其参数,并在发现无效值(如
null
)时立即抛出异常时,效果更好


编辑-关于单参数版本:即使您不会提供错误消息,检查参数并尽早抛出异常也比让
null
向下传递直到某个更深的地方发生异常更有用。堆栈跟踪将指向您使用
对象的行。requirennoull(…)
,作为开发人员,您应该清楚这意味着您不应该传递
null
。当您让
NullPointerException
隐式发生时,您不知道原始程序员是否有意让变量不为
null

这是一种实用方法。只是一条捷径!(快捷方式设计者有自己的快捷方式风格)

为什么一开始就扔? 安全性和调试

  • 安全性:在敏感位置不允许任何非法值。(使内部算法更加确定他们在做什么和拥有什么)
  • 调试:使程序在发生意外情况时快速停止运行

您的实际问题是什么?你已经回答了你在标题中提出的问题。@Radoidef Sotirios Delimanolis对此进行了最好的总结——“我认为这个问题,来自身体,是为什么你会使用不带信息的超负荷。”你应该编辑你的问题来澄清。好吧,已经添加了它。我认为这个问题,来自身体,我完全同意尽早捕获错误的原则,但是抛出NullPointerException对我来说听起来很奇怪。如果您要花时间检查它,我假设您可以抛出一个更友好的异常,如InvalidArmeterException或类似的东西。@RaphaelMoita表示参数无效的标准异常是
IllegalArgumentException
Objects.requirennoull(…)
的设计者选择使用
NullPointerException
来代替…@Jesper你明白我的意思了!IllegalArgumentException更有意义!是否有任何原因使他们没有使重载允许开发人员选择抛出的异常?