简化Java if语句
我需要一些帮助来将这个Java代码转换为if/else语句简化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
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
- 级别为空,日志级别不为空
- level为null,log.level也是
- 级别不为null,但级别等于log.level
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
- 级别为空,日志级别不为空
- level为null,log.level也是
- 级别不为null,但级别等于log.level
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)
方法),那么我就浪费了一段时间