在检查了JavaDocs我正在考虑使用的方法requiredNonNull
后,我偶然发现了第一个使用单个参数(T obj)
的方法。
然而,使用此签名的此特定方法的实际目的是什么?所有这一切只是投掷和NPE,我有点积极(因为我可能会遗漏一些明显的东西)无论如何都会抛出。
抛出: NullPointerException - 如果obj为null
后者在调试某些代码方面实际上是有意义的,正如文档所述,它主要是为参数验证而设计的
public static <T> T requireNonNull(T obj,String message)
检查指定的对象引用是否为null,如果是,则抛出自定义的NullPointerException。
因此,我可以与NPE一起打印特定信息,使调试变得更加容易。
考虑到这一点,我非常怀疑我会遇到一种情况,我宁愿只使用前者。请赐教。
tl; dr - 你为什么要使用没有收到信息的重载。
答案 0 :(得分:28)
编写软件时的一个好原则是尽早发现错误。您注意到的速度越快,例如传递给方法的null
等错误值,就越容易找出原因并解决问题。
如果您将null
传递给不应该接收null
的方法,则NullPointerException
可能会在某处发生,正如您已经注意到的那样。但是,除非一些方法进一步下降,否则可能不会发生异常,当它发生在内部深处时,找到错误的确切来源将更加困难。
因此,当方法预先检查他们的参数并在找到无效值(例如null
)时抛出异常会更好。
编辑 - 关于单参数版本:即使您不提供错误消息,检查参数并提前抛出异常比让null
通过更有用直到异常发生在更深处的某个地方。堆栈跟踪将指向您使用Objects.requireNonNull(...)
的行,作为开发人员,您应该明白这意味着您不应该通过null
。当你隐含地发现NullPointerException
时,你不知道原始程序员是否有意图变量不应该是null
。
答案 1 :(得分:1)
这是一种实用方法。只是捷径! (快捷方式设计师有自己的快捷方式样式方法。)
为什么要先扔? 安全和调试。