优雅地避免在Java中提供NullPointerException

请考虑以下行:

if (object.getAttribute("someAttr").equals("true")) { // ....

显然,这行是一个潜在的错误,属性可能是,我们将得到一个.因此,我们需要将其重构为以下两个选项之一:nullNullPointerException

第一个选项:

if ("true".equals(object.getAttribute("someAttr"))) { // ....

第二个选项:

String attr = object.getAttribute("someAttr");
if (attr != null) {
    if (attr.equals("true")) { // ....

第一个选项读起来很尴尬,但更简洁,而第二个选项在意图上很清楚,但很冗长。

在可读性方面,您更喜欢哪个选项?


答案 1

我一直使用

if ("true".equals(object.getAttribute("someAttr"))) { // ....

因为虽然它有点难以阅读,但它不那么冗长,我认为它足够可读,所以你很容易习惯它。


答案 2

在第二个选项中,您可以利用短路:&&

String attr = object.getAttribute("someAttr");
if (attr != null && attr.equals("true")) { // ....