2011-09-11 88 views
6

這個由lookup返回的foo可能是null是否有更簡潔的方式來編寫此Java代碼?

,這就是爲什麼我試圖避免第一返回null如果foonull值調用foo.getFooStr()null

但是,有沒有更好的(更簡潔)的方式來寫這個?

public static String getFooStr(String input) 
{ 
    Foo foo = lookup(input); 
    if(foo==null) 
    { 
     return null; 
    } 
    return foo.getFooStr(); 
} 
+0

這個問題是相似的(但不完全相同),希望給你一些見解:http://stackoverflow.com/questions/271526/how-to-avoid-null-statements-in-java –

+4

沒有錯用你寫的東西。編寫它看起來更短,並不一定會更好。 – Matt

+2

另外,對於字符串爲空或非空的情況,可以在不同的行中包含斷點。這有助於調試。 –

回答

6

爲什麼沒有lookup返回相應的foo字符串?

+0

+1是的,它應該通過查找完成。 –

+2

+1這將是最簡潔的。 ;) –

34

你已經兩個問題:是否有寫代碼更好方式,並有寫代碼更簡潔方式。

關於更多簡潔,這可能是工作:

public static String getFooStr(String input) { 
    Foo foo = lookup(input);   
    return foo == null ? null : foo.getFooStr(); 
} 

關於更好:我看重了簡明易讀的任何一天,並大幅。你原來的代碼對我來說看起來很好。重要的是對你來說看起來很好,而且從現在起3個月你更容易理解和調試。我聽到有人說最好 - 寫你的代碼,以便其他人很容易理解,更重要的是,你的未來自我。

+6

+1恕我直言少代碼是好的,只要它仍然清楚,這是。順便說一句,爲了更好的可讀性,我刪除了括號噪聲(即'foo == null'而不是'(foo == null)'),希望你不介意。 – Bohemian

+0

@Bohem:謝謝! –

+5

@ Bohem:HFOE說得很好,重要的是......更容易理解和調試......並使其他人很容易理解。對於我們這些瞭解類似C語言的操作員的語法幾乎是母語的人,您所消除的「括號噪音」可能只是噪音;對於經驗較少的人(這些人多得多,但可能不是你的聽衆),括號使其更具可讀性,因爲他們不必知道'?:'的優先級是否高於'=='。我並不是說你錯誤地移除了這些包袱,但它們並不是噪音,而我更可能將它們留下。 – LarsH

3

我不是java,但我喜歡乾淨的代碼......源代碼應該易於閱讀和理解人類 - 機器不在乎它看起來如何,而是你的同事。更簡潔的代碼通常需要花費一兩分之一的時間來掌握(有時候根據數量和複雜程度會有很長的時間)。保持代碼可以理解,並且可以維護(即使它有點冗長)!

2

對於Java 7,在某些時候它的計劃是你可以只寫:

public static String getFooStr(String input) 
{ 
    Foo foo = lookup(input); 
    return foo?.getFooStr(); 
} 

但直到這一功能廣泛已知,您將不得不堅持?:運營商。

+0

這是目前在Java7任何可用請鏈接,如果可能的話。我會有興趣閱讀此。 –

+0

該功能沒有進入Java7,但我懷疑它會很快添加。雖然C#明顯擁有它;-) – Voo

+4

2009年,Java的運營商從Java 7中被拋棄了。項目COIN網站說:「雖然Elvis運營商和相關運營商在Groovy中很有幫助,但Groovy和Java之間的差異,例如原始類型的存在以及與裝箱/拆箱的交互使得操作員在Java中的用處不大,JDK 7將支持其他方法來緩解空處理的痛苦,比如JSR 308啓用的空檢查。「*(JSR 308 is type註釋以及JDK 8) –

1

我不喜歡多個返回任何代碼中的任何地方。我只是將其更改爲

public static String getFooStr(String input) 
{ 
    Foo foo = lookup(input); 
    String fooString; 
    if(foo!=null) 
    { 
     fooString = foo.getFooStr(); 
    } 
    return fooString; 
} 

而且從@Hovercraft完整的鰻魚是我認爲很好,但不易閱讀的版本,但仍然做的一種常見方式。

+5

如果您不喜歡多個退貨,那麼請不要看'Throwable'。 –

+0

如果上面的代碼不夠清晰,你不應該編碼@EricLindauer –

+0

@EricLindauer讓你失望了嗎? –

相關問題