【发布时间】:2013-06-22 12:58:33
【问题描述】:
在调用对象的函数之前,我需要检查对象是否为空,避免抛出NullPointerException。
解决此问题的最佳方法是什么?我考虑过这些方法。
哪一个是 Java 的最佳编程实践?
// Method 1
if (foo != null) {
if (foo.bar()) {
etc...
}
}
// Method 2
if (foo != null ? foo.bar() : false) {
etc...
}
// Method 3
try {
if (foo.bar()) {
etc...
}
} catch (NullPointerException e) {
}
// Method 4 -- Would this work, or would it still call foo.bar()?
if (foo != null && foo.bar()) {
etc...
}
【问题讨论】:
-
永远不要捕获空指针异常。它属于“愚蠢的例外”类别blogs.msdn.com/b/ericlippert/archive/2008/09/10/…
-
根据您的用例,如果将
nullfoo 传递给您的方法,则禁用foo的null值并抛出NullPointerException也是有意义的。 -
1) 1 和 4 之间的区别是样式选择和微优化。 2)只要你不让异常被抛出,这并不重要,而不是担心哪个最好用,你的时间最好花在清晰的设计/更好的算法上。
-
@assylias 在这种情况下应该使用
IllegalArgumentException。 -
@NickFreeman 我不同意 - 参见例如:stackoverflow.com/a/8196334/829571 - 标准(在 JDK、番石榴和根据 Effective Java 中)是抛出 NPE。虽然 IAE 诚然也常用于这种情况。
标签: java null nullpointerexception