2010-07-23 39 views
2

今天早些時候我問this愚蠢的問題,並得到了很好的答案。我想我真正要問的是以下幾點:Java字符串初始化(第2部分)

String aString = ""; // Or = null ? 
if(someCondition) 
    aString = "something"; 

return aString; 

在這種情況下,字符串必須被初始化才能返回它。我一直認爲無論是哪種選項(將其設置爲「」或爲null都看起來有點醜陋,我只是想知道其他人在這裏做什麼......或者更多的只是空字符串還是null傳遞的問題在你的程序(如果你準備處理任何一種)?

此外,假設中介邏輯太長乾淨使用條件(?:)運算符。

+5

存在(IMO)語義差異。 null意味着它沒有被初始化,但「」意味着它被故意設置爲一個空字符串。 – Kylar 2010-07-23 19:57:38

+0

它被稱爲三元運算符。 :) – 2010-07-23 20:04:26

+0

哦,我知道它叫什麼(如果你看到我引用的帖子):)不知道爲什麼我在這一個叫它別的東西... – ewa 2010-07-23 20:05:31

回答

1

取決於你想要達到的目標,

一般我會返回null信號,沒有什麼

進行處理, 日後可能會被彈出的情況下someCondition是真實的,但你建立起來的字符串爲「」反正如果沒有處理任何內容,如果返回null,那麼您可以區分這種情況。

String aString = null; 
if(someCondition) 
    aString = "something"; 

return aString; 

但是這一切真的取決於你想要達到... 例如什麼如果代碼是假設建立起來是在你去「」,而不是

3
return (someCondition) ? "something" : ""; 

return (someCondition) ? "something" : null; 

通常雖然如果你的函數說它會返回一個String I pre fer實際返回一個String而不是null。無論哪種方式調用函數應該可能檢查這兩種情況。

+0

我不同意調用函數應該檢查這兩種情況辦法。你的函數的返回值應該是明確的。 – 2010-07-23 20:03:16

+0

括號是不必要的。 – 2010-07-23 20:03:38

+1

此外,原始海報已經改變了他的問題,「假設中介邏輯太長,不能幹淨地使用[三元]運算符。」他並不是在詢問是否使用三元運算符,而是詢問是否返回null或空字符串的最佳做法。 – 2010-07-23 20:03:52

0

是的,這只是一個問題,你是否想在程序中傳遞一個null或一個空字符串。如果你打算在後面添加東西,someCondition只是表示你應該給它一個第一個值,然後使用空字符串。如果你打算讓它指示有一個字符串或沒有任何東西,那麼也許使用null更好。

0

它只是你的api應該做的選擇。如果你返回null,那麼如果沒有檢查null,api用戶可能會得到NPE。但是如果你使用「」字符串,如果錯誤不應該是空的,錯誤可能會默默通過。這是你如何編寫你的API的首選項,並取決於用例。

1

在這種情況下,UI直接傳遞一個字符串它可能是最好做這樣的事情:

public void func() { 
    boolean condition = getConditionFromSomewhere(); 
    String condString = getAppropriateValue(condition); 
} 

public String getAppropriateValue(boolean condition) { 
    if (condition) { 
     return "something"; 
    } else { 
     return "somethingElse"; 
    } 
} 

它可能看起來對布爾條件來說有點矯枉過正,但如果你進入更復雜的條件(更多的選擇,比如枚舉等),它會很好地抽象出邏輯。並且使用描述性方法名稱使其幾乎可以自行記錄以引導。

1

既然你問我們的意見...

我對質量有點過分了。我更喜歡所有的「if」語句都有一個「else」,因爲(1)它有助於理解代碼是否有多個嵌套的「if」,(2)迫使我考慮可能性(如果條件是錯誤的?)。

關於原因(1),我寧願避免嵌套的if,但有時候你會繼承很多if的代碼。

if(someCondition) 
    aString = "something"; 
else 
    aString = ""; 

我更喜歡「空」,因爲它會使應用程序失敗並轉儲我可以遵循的堆棧。相反,一個空白的字符串會使事情繼續下去。當然,它取決於你的代碼的邏輯是什麼更好:null或「」。

0

考慮到這一點,我很少在代碼中使用「」來達到任何目的。