<分区>
如果我的代码返回 Map<String, String>
当然可以,但可能是空的。将其转换为返回有好处吗 Optional<Map<String, String>>
.它会给空但不是 null 的实例带来任何好处吗?
<分区>
如果我的代码返回 Map<String, String>
当然可以,但可能是空的。将其转换为返回有好处吗 Optional<Map<String, String>>
.它会给空但不是 null 的实例带来任何好处吗?
最佳答案
就像计算机编程中的许多主题一样,这取决于 (tm)。
我使用 optional 的方式是作为 null 的替代(简而言之)。其中之一advantages是它迫使调用者考虑可能没有返回值,并且这是一个有效条件......考虑上面链接的答案中的引号:
absence of a value is a more precise formulation than null
和
Any reader of your code or consumer of your API will be beaten over the head with the fact that there might be nothing there and that a check is necessary before accessing the value.
所以当我看到返回类型签名时 Optional<Map<String, String>>
,我认为它是一个函数的返回类型,其中一个空 Map
可能是有效的返回值,但完全缺少 Map
也是如此.
这方面的例子包括 getCachedFavoriteColors
, findInvalidValuePairs
等。在前一种情况下,可能没有任何用户,这将返回一个空的 Map
。 -- 但可能没有缓存值,这将返回无效的 Optional
.在第二种情况下,可能没有任何无效值对,这将再次返回一个空的 Map
。 , 但也可能没有 Invalidator
.你明白了。
请注意,在上述某些情况下,您可能希望抛出异常而不是返回无效的 Optional
。 .这是您作为 API 设计者的决定。
关于java - 返回 Optional<Map<String, String>> 而不仅仅是一个空的 Map<String, String> 的真正好处是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29711884/