Java / Guava:处理'null'参数。哪个例外?

时间:2015-02-18 08:57:22

标签: java guava

令人困惑:我们都知道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访问权限? 为什么这个新的第三种方法。

有人可以解除雾气吗?

3 个答案:

答案 0 :(得分:4)

我同意Aaron。我的两分钱是因为在Java 7 Objects.requireNonNull中添加了NullPointerException并抛出{{1}},这就是我的方式。对我来说,似乎语言开发人员通过这样做来权衡这个问题。

答案 1 :(得分:3)

没有正确的方法。有些人认为NPE因为你传递了一个空指针。另外,您可以直接使用Preconditions.checkNotNull()而无需在必须编写的代码中进行任何其他检查(!=null是另外6-10次按键,毕竟,人们必须阅读更多代码才能了解您的内容重做)。

从API的角度来看,

Preconditions.checkArgument()更有意义,因为该方法不需要null个参数。此外,您还需要在调试时编写和读取其他代码。

Verifify对我来说似乎太弱了,after reading the documentation

答案 2 :(得分:1)

“有效的Java”似乎非常坚决地赞成抛出NullPointerException IllegalArgumentException or NullPointerException for a null parameter?