在这种条件下进行比较时如何检查Null Pointers

时间:2014-05-13 12:27:33

标签: java

使用Wrapper类比较compareTo方法时(例如Long或Integer)

if(!this.getAttribute().compareTo(myobj.getAttribute()))
{
   //changeLog to log the changes done from this object to myobj
}

在上述条件下,我想创建changeLog字符串,但有几个条件:

1.this.getAttribute() can be null.

2.myobj.getAttribute() can be null.

3.Both this.getAttribute() and myobj.getAttribute() can be null.

如果是null,我想在changeLog字符串中附加空字符串。它也应该处理空检查。

4 个答案:

答案 0 :(得分:0)

null条件中添加if项检查。条件从左到右进行评估。如果和(&&)的左侧失败,则不会执行右侧。因此,如果您订购支票并且首先进行NullPointerException检查,则不会遇到!= null

if(this.getAttribute() != null && 
       myobj.getAttribute() != null && 
       !this.getAttribute().compareTo(myobj.getAttribute())){
   //changeLog to log the changes done from this object to myobj
}

答案 1 :(得分:0)

Java用?.符号调整了一段时间(null传播),但它从未被采用过。可能因为它可能破坏了语言。您需要自己检查null。但是,像C和C ++ 这样的Java 已经缩短了if s(与VBA不同),所以编码null - 安全代码很简单,如果单调乏味。

答案 2 :(得分:0)

我不确定我是否理解你这就是我要做的事情

if(this.getAttribute() == null) {
    if(myobj.getAttribute() != null) {
        System.out.println(MessageFormat.format("Attribute was changed to {0} from null",myobj.getAttribute()));
    }
} else {
    if(myobj.getAttribute() == null) {
        System.out.println("Attribute was changed to null",myobj.getAttribute());
    } else if (!myObject.getAttribute().equals(this.getAttribute())) {
        System.out.println("Attribute was changed to {0} from {1}",myobj.getAttribute(), this.getAttribute());
    }
}

答案 3 :(得分:0)

我不确定你在这个问题上的动机。

如果您正在寻找支持compareToNullSupported值的null这样的简单方法。然后我没有任何建议,根据我的经验,我对这种功能的存在没有任何了解。

现在,如果您需要多次验证,请创建自定义compareTo功能。我不建议覆盖compareTo函数,因为它只会使代码更复杂。而是创建一个简单的函数,并在需要时调用它。

public int compareTo(Object obj1, Object obj2) {
        if(obj1 == null || obj2 == null)
           return 0;
        else
            return obj1.compareTo(obj2);
    }
}