2015-10-27 68 views
2

這是我的。避免三元違規干擾?

Map data = new HashMap<>(); // assume this has been populated 

public int getLastestVersion() { 
    // data.get("PATH_TO_DESIRED_POINT") would be an integer 
    return data.get("PATH_TO_DESIRED_POINT") == null ? 0 : (int)data.get("PATH_TO_DESIRED_POINT"); 
} 

我試圖避免違反DRY,但我希望能夠保持三元的簡單性。有什麼我可以做的嗎?

+1

如果你想避免重複自己,你應該使用泛型啓動;這就是他們在那裏的原因。 – chrylis

+2

@chrylis:那不是他的問題。 – SLaks

+1

使用具有Elvis操作符的Groovy使得這非常簡單。 – chrylis

回答

4

如果您正在使用Java8,您可以使用getOrDefault方法:

return data.getOrDefault("PATH_TO_DESIRED_POINT", 0); 
+3

這可能導致'null':D – ZhongYu

+0

@ bayou.io是的,如果地圖包含值爲'null'的鍵,那麼是對的 – ntalbs

+0

是的,但在OP的應用中可能不是問題 – ZhongYu

2

您可以將結果分配給局部變量final。這樣編譯器就可以自由地將其內聯,並且您不必重複調用以獲取Map<String, Integer> data。在Java 8+,像

​​
+3

您可能不需要intValue()位,因爲自動裝箱。 –

+0

@EngineerDollery我假設你的意思是[autounboxing](http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#d5e17099)。我在Java 8中檢查了你是對的。這是合法的。 –

+0

我喜歡這個臨時變量也是因爲它確保它在地圖變化時甚至可以工作,並且它允許命名變量描述性的('pathNum'或者其他)。BTW:最後是一個很好的實踐,但是熱點無論如何都會優化它。 – eckes