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

Java/Guava: handle 'null' arguments. Which exception?

令人困惑:我们都知道 Doug Lea 的话:"Null sucks"。他是对的。

现在我有一些方法可以使用 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 访问权限? 以及为什么采用这种新的第三种方法。

有人能拨开迷雾吗?

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

Preconditions.checkArgument() 从 API 的角度来看更有意义,因为该方法不需要 null 参数。此外,您在调试时还可以编写和阅读额外的代码。

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

我同意 Aaron。我的两分钱是因为在 Java 中添加了 7 Objects.requireNonNull 并且它抛出了 NullPointerException,这就是我要走的路。在我看来,语言开发人员似乎已经通过这样做权衡了这个问题。

"Effective Java" 似乎非常坚决地支持抛出 NullPointerException IllegalArgumentException or NullPointerException for a null parameter?