[英]Should I use null or empty string if the String is passed around in the code? (Java best practice)
我有一个在API中是可选的String。 如果我没有得到该参数,我不确定是否应该使用空String
或null
值。 该值在许多函数中传递,并在其中一些函数中使用。
我一直在考虑这个,这就是我提出的。
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.