2011-12-02 583 views
0

我想要一些幫助將此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; 
} 

回答

3

這纔是真正可怕的代碼:它充滿了雙重否定的!難怪你想讓它可讀。

(我認爲)這就是它應該是什麼:

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

注意參數obj被忽略

0

它被稱爲ternary operation和給定的表達式可以寫爲:

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

也值得嘗試問自己的英文版本根據你想要什麼情況下(?)返回true或false。然後把它翻譯成Java。

在您所提供的代碼,你就返回true,除非:

  • 級別不爲空,且水平不log.level
  • 水平爲空,和日誌級別不爲空

嘗試翻轉,圍繞並轉動 「除非」 到 「如果」: 返回true 如果

  • 水平爲空,所以是log.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是否與此相同,該方法都應返回,並且在您提供的代碼中,您不會詢問任何有關obj的問題。您正在回答的問題不同於等於(對象)要求您回答的問題。

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; 
} 
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; 
} 
2

波西米亞筆記這樣的:

注意參數obj是忽略

現在,在問題中給出的方法將覆蓋標準equals(Object),和(?)該方法應該實現指定的語義;請參閱javadoc的Object.equals(Object)

此外,這個版本的equals(Object)顯然不實現這些語義。(怎麼也x.equals(y)測試,如果x等於y,如果它不是指y?)

所以我的建議的OP就是來解決這個破碎的equals方法,以及任何依賴於擁有這些破語義的方法。而不是僅僅試圖讓方法更具可讀性。


如果這不是真正的代碼(即,如果這不是一個equals(Object)方法在所有),那麼我剛剛浪費了一個很好的咆哮。