簡體   English   中英

如果String在代碼中傳遞,我應該使用null或空字符串嗎? (Java最佳實踐)

[英]Should I use null or empty string if the String is passed around in the code? (Java best practice)

我有一個在API中是可選的String。 如果我沒有得到該參數,我不確定是否應該使用空Stringnull值。 該值在許多函數中傳遞,並在其中一些函數中使用。

我一直在考慮這個,這就是我提出的。

  • 使用null可能會更好,因為如果開發人員嘗試使用它而不檢查它是否存在,它會拋出NPE。 ""不會這樣做,所以開發人員可能會認為他在不存在時使用字符串。
  • 使用""可能會更好,因為如果開發人員想要更改某些內容,他/她將不需要檢查空指針。 當開發人員不需要知道值是否存在就像改變字符串的編碼一樣時,這可能是有益的。

在這種情況下,最佳做法是什么?

編輯:我正在尋找為什么一種方法比另一種更好的原因。 Optional聽起來很有趣。

空字符串絕對優於null。 如果要指示該設置是可選的 ,並提供不同的行為,請使用Optional<String>

在我看來,如果""不是該參數的有效值,請使用"" 否則使用null

關於你的第一點,如果你試圖對一個空字符串進行子串或調用charAt或類似的東西,你將得到一個IndexOutOfRangeException 所以我認為不鼓勵使用它而不檢查空字符串。 有很多方法可以防止NPE。

另一種選擇是Optional<String> ,但我認為目前它的語法看起來太難看了。 如果它不被認為是有效值,我仍然會使用""

如果您在API中返回null String,那么使用它的開發人員完全有可能忘記檢查其值是否為null 正如Joop在他的回答中已經提到的那樣,使用Optional<String>

這迫使API的消費者檢查它的存在(或者至少,考慮如何處理它的缺席),例如

myAPI.ifPresent(/* do something with String */);
myAPI.map(String::toLowerCase).orElse("");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM