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
这是一种实用方法。只是一条捷径!(快捷方式设计者有自己的快捷方式风格)
为什么一开始就扔?
安全性和调试
- 安全性:在敏感位置不允许任何非法值。(使内部算法更加确定他们在做什么和拥有什么)
- 调试:使程序在发生意外情况时快速停止运行
IllegalArgumentException
。Objects.requirennoull(…)
的设计者选择使用NullPointerException
来代替…@Jesper你明白我的意思了!IllegalArgumentException更有意义!是否有任何原因使他们没有使重载允许开发人员选择抛出的异常?