我想要一些帮助将这个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;
}
答案 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)
如果不引用x
,y
如果等于y
,equals(Object)
如何进行测试?)
所以我对OP的建议是修复这个破坏的equals方法,无论取决于具有这些破坏语义的方法......而不仅仅是试图使方法更具可读性。
如果这不是真正的代码(即,这根本不是{{1}}方法)那么我只是浪费了一个好的咆哮。
答案 2 :(得分:1)
在你想要回归真假的情况下,可能值得用英语问问自己。然后将其翻译为Java。
在您提供的代码中,您将返回true,除非:
尝试翻转并将“除非”转换为“if”: 返回true if :
在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;
}