简化Java if语句

时间:2011-12-02 06:30:46

标签: java if-statement

我想要一些帮助将这个Java代码转换为if / else语句。

public boolean equals(final Object obj) {
    boolean result = true;
    if (level != null ? !level.equals(log.level) : log.level != null)
    {
        result = false;
    }
    return result;
}

6 个答案:

答案 0 :(得分:3)

这是真正可怕的代码:它充满了双重否定!难怪你想让它变得可读。

(我认为)这应该是:

return log.level == null || log.level.equals(level);

请注意,忽略参数obj(?)

答案 1 :(得分:2)

波西米亚人注意到这一点:

  

请注意,忽略参数obj(?)

现在,问题中给出的方法会覆盖标准equals(Object),并且该方法应该实现指定的语义;请参阅Object.equals(Object)的javadoc。

此外,这个版本的equals(Object)显然没有实现那些语义。 (如果x.equals(y)如果不引用xy如果等于yequals(Object)如何进行测试?)

所以我对OP的建议是修复这个破坏的equals方法,无论取决于具有这些破坏语义的方法......而不仅仅是试图使方法更具可读性。


如果这不是真正的代码(即,这根本不是{{1}}方法)那么我只是浪费了一个好的咆哮。

答案 2 :(得分:1)

在你想要回归真假的情况下,可能值得用英语问问自己。然后将其翻译为Java。

在您提供的代码中,您将返回true,除非:

  • level不为null,level不是log.level
  • level为null,日志级别不为null

尝试翻转并将“除非”转换为“if”: 返回true if

  • level为null,因此是log.level
  • level不为null,但level等于log.level

在Java中,这变为:

if (level == null)
{
    return log.level == null;
}
else
{
    return level.equals(log.level);
}

或者更简单:

return level == null ? log.level == null : level.equals(log.level);

尽管如此,这并不是你想要equals(Object obj)方法的工作方式。该方法应返回obj是否等于this,并且在您提供的代码中,您不会询问有关obj的任何问题。你正在回答一个不同的问题,而不是等于(对象)要求你回答的问题。

答案 3 :(得分:0)

它被称为ternary operation,给定的表达式可以写成:

if (level != null) {
    if(!level.equals(log.level)) {
        result = false;
    }
} else {
    if(log.level != null) {
        result = false;
    }
}

答案 4 :(得分:0)

public boolean equals(final Object obj) {
  boolean result = true;

  if (level != null)
  {
    if(!level.equals(log.level) 
    {
      result = false;
    }
  } 
  else
  {
    if(log.level != null)
    {
      result = false;
    }

  }
  return result;
}

答案 5 :(得分:0)

public boolean equals(final Object obj) {
    boolean result = true;

    if (level != null) {
        result = level.equals(log.level);
    } else {
        result = log.event != null;
    }

    return result;
}