检查两个对象是否不相等,除非它们都为空

时间:2018-02-11 02:20:33

标签: java null boolean-logic

以下Java代码片段让我感到困惑。该方法试图检查两个对象是否 NOT 相等,使用标准.equals()方法表示它们是相等的。另外,布尔值可以确定两个空值是否被认为是相等的。我想知道是否:

  • 此方法中的布尔逻辑确实正确吗?
  • 可以以某种方式省略中间块中的return语句。这个逻辑是否可以更简洁或其他方式重写,可能会丢弃空的回报,但保持人类对代码的高度可读性?

段:

public static void verifyVariableIsNotEqualTo(Object variable, Object otherVariable, boolean considerBothNullAsEqual)
{
    if(considerBothNullAsEqual && variable == null && otherVariable == null)
    {
        throw new Exception("not allowed to be equal");
    }

    if(variable == null || otherVariable == null)
    {
        return;
    }

    if(variable.equals(otherVariable))
    {
        throw new Exception("not allowed to be equal");
    }
}

1 个答案:

答案 0 :(得分:1)

是的,方法中的逻辑是正确的。如果两个对象相等,它会抛出异常。您可以删除第二个条件并将其与第三个条件组合,但我没有看到太多意义。如果你这样做,方法可能如下所示。

public static void verifyVariableIsNotEqualTo(Object variable, Object otherVariable, boolean considerBothNullAsEqual) throws Exception
{
    if(considerBothNullAsEqual && variable == null && otherVariable == null)
    {
        throw new Exception("not allowed to be equal");
    }

    if(variable != null && variable.equals(otherVariable))
    {
        throw new Exception("not allowed to be equal");
    }
}

请注意,无需单独检查otherVariable是否为空,因为如果equals为空,variable上的otherVariable方法应返回false。

有一种更简洁的方式来写这个,但它不值得考虑,因为它牺牲了可读性。