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?
令人困惑:我们都知道 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?