我想要一些幫助將此Java代碼轉換爲if/else語句。簡化Java if語句
public boolean equals(final Object obj) {
boolean result = true;
if (level != null ? !level.equals(log.level) : log.level != null)
{
result = false;
}
return result;
}
我想要一些幫助將此Java代碼轉換爲if/else語句。簡化Java if語句
public boolean equals(final Object obj) {
boolean result = true;
if (level != null ? !level.equals(log.level) : log.level != null)
{
result = false;
}
return result;
}
這纔是真正可怕的代碼:它充滿了雙重否定的!難怪你想讓它可讀。
(我認爲)這就是它應該是什麼:
return log.level == null || log.level.equals(level);
注意參數obj
被忽略
它被稱爲ternary operation和給定的表達式可以寫爲:
if (level != null) {
if(!level.equals(log.level)) {
result = false;
}
} else {
if(log.level != null) {
result = false;
}
}
也值得嘗試問自己的英文版本根據你想要什麼情況下(?)返回true或false。然後把它翻譯成Java。
在您所提供的代碼,你就返回true,除非:
嘗試翻轉,圍繞並轉動 「除非」 到 「如果」: 返回true 如果:
在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是否與此相同,該方法都應返回,並且在您提供的代碼中,您不會詢問任何有關obj的問題。您正在回答的問題不同於等於(對象)要求您回答的問題。
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;
}
public boolean equals(final Object obj) {
boolean result = true;
if (level != null) {
result = level.equals(log.level);
} else {
result = log.event != null;
}
return result;
}
波西米亞筆記這樣的:
注意參數obj是忽略
現在,在問題中給出的方法將覆蓋標準equals(Object)
,和(?)該方法應該實現指定的語義;請參閱javadoc的Object.equals(Object)。
此外,這個版本的equals(Object)
顯然不實現這些語義。(怎麼也x.equals(y)
測試,如果x
等於y
,如果它不是指y
?)
所以我的建議的OP就是來解決這個破碎的equals方法,以及任何依賴於擁有這些破語義的方法。而不是僅僅試圖讓方法更具可讀性。
如果這不是真正的代碼(即,如果這不是一個equals(Object)
方法在所有),那麼我剛剛浪費了一個很好的咆哮。