令人困惑:我们都知道Doug Lea的话:" Null很糟糕"。他是对的。
现在我有一些使用googles guava抛出异常的方法。但现在正确的方法是什么?
1)抛出 NullPointerException
private void foo(Object arg) {
Preconditions.checkNotNull(arg, "arg 'null' not accepted");
}
2)或 IllegalArgumentException
private void foo(Object arg) {
Preconditions.checkArgument(arg!=null, "arg 'null' not accepted");
}
3)或 VerifyException
private void foo(Object arg) {
Verify.verify(arg!=null, "arg 'null' not accepted");
}
我的意思是,第一种方法是不是已经过时,因为我们此时没有NullPointer访问权限? 为什么这个新的第三种方法。
有人可以解除雾气吗?
答案 0 :(得分:4)
我同意Aaron
。我的两分钱是因为在Java 7 Objects.requireNonNull中添加了NullPointerException
并抛出{{1}},这就是我的方式。对我来说,似乎语言开发人员通过这样做来权衡这个问题。
答案 1 :(得分:3)
没有正确的方法。有些人认为NPE因为你传递了一个空指针。另外,您可以直接使用Preconditions.checkNotNull()
而无需在必须编写的代码中进行任何其他检查(!=null
是另外6-10次按键,毕竟,人们必须阅读更多代码才能了解您的内容重做)。
Preconditions.checkArgument()
更有意义,因为该方法不需要null
个参数。此外,您还需要在调试时编写和读取其他代码。
Verifify
对我来说似乎太弱了,after reading the documentation。
答案 2 :(得分:1)
“有效的Java”似乎非常坚决地赞成抛出NullPointerException
IllegalArgumentException or NullPointerException for a null parameter?