Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简化Java if语句_Java_If Statement - Fatal编程技术网

简化Java if语句

简化Java if语句,java,if-statement,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; } 它被称为a,给定的表达式可以写成: if (l

我需要一些帮助来将这个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;
}
它被称为a,给定的表达式可以写成:

if (level != null) {
    if(!level.equals(log.level)) {
        result = false;
    }
} else {
    if(log.level != null) {
        result = false;
    }
}
它被称为a,给定的表达式可以写成:

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

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

(我认为)这是应该的:

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

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

这是非常糟糕的代码:它充满了双重否定!难怪你想让它可读

(我认为)这是应该的:

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

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

可能值得尝试用英语问自己在什么情况下要返回true或false。然后把它翻译成Java

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

  • 级别不为null,并且级别不是log.level
  • 级别为空,日志级别不为空
尝试将其翻转过来,并将“除非”转换为“如果”: 如果出现以下情况,则返回true:

  • level为null,log.level也是
  • 级别不为null,但级别等于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(objectobj)方法工作的方式。该方法应该返回obj是否等于这个值,并且在您提供的代码中,您没有询问任何关于obj的问题。你回答的问题与equals(Object)要求你回答的问题不同。

在什么情况下你想返回true或false,用英语问问自己可能是值得的。然后把它翻译成Java

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;
}
在您提供的代码中,您将返回true,除非:

  • 级别不为null,并且级别不是log.level
  • 级别为空,日志级别不为空
尝试将其翻转过来,并将“除非”转换为“如果”: 如果出现以下情况,则返回true:

  • level为null,log.level也是
  • 级别不为null,但级别等于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(objectobj)方法工作的方式。该方法应该返回obj是否等于这个值,并且在您提供的代码中,您没有询问任何关于obj的问题。你回答的问题与equals(Object)要求你回答的问题不同。

波希米亚人指出:

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;
}
请注意,参数obj被忽略(?)

现在,问题中给出的方法覆盖了标准的
equals(Object)
,该方法应该实现指定的语义;有关详细信息,请参阅javadoc

此外,这个版本的
equals(Object)
显然没有实现这些语义。(如果
x.equals(y)
没有引用
y
,如何测试
x
是否等于
y

所以我给OP的建议是修复这个破了的equals方法,不管什么取决于这个方法有这些破了的语义。。。而不仅仅是试图让方法更具可读性


如果这不是真正的代码(即,如果这根本不是一个
equals(Object)
方法),那么我就浪费了一段时间。

波希米亚人指出:

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

现在,问题中给出的方法覆盖了标准的
equals(Object)
,该方法应该实现指定的语义;有关详细信息,请参阅javadoc

此外,这个版本的
equals(Object)
显然没有实现这些语义。(如果
x.equals(y)
没有引用
y
,如何测试
x
是否等于
y

所以我给OP的建议是修复这个破了的equals方法,不管什么取决于这个方法有这些破了的语义。。。而不仅仅是试图让方法更具可读性


如果这不是真正的代码(即,如果这根本不是一个
equals(Object)
方法),那么我就浪费了一段时间