如果我的代码肯定会返回Map<String, String>
,但可能是空的。将其转换为返回Optional<Map<String, String>>
是否有好处。它会为空的但不是空的实例添加任何好处吗?
答案 0 :(得分:9)
与计算机编程中的许多科目一样,它取决于(tm)。
我使用optional的方法是替换 null (简而言之)。其中一个advantages是强制调用者认为可能没有返回值,并且这是一个有效的条件......考虑上面链接的答案中的引号:
缺少值是一个比 null 更精确的公式
和
您的代码的任何读者或您API的消费者都将遭到殴打,其中可能没有任何内容,并且在访问该值之前需要进行检查。
所以当我看到返回类型签名Optional<Map<String, String>>
时,我认为它是一个函数的返回类型,其中空Map
可能是一个有效的返回值,但完全没有Map
。
此示例包括getCachedFavoriteColors
,findInvalidValuePairs
等。在前一种情况下,可能没有任何用户会返回空Map
- 但可能没有是一个缓存值,它将返回无效的Optional
。在第二种情况下,可能没有任何无效值对,这将再次返回空Map
,但也可能没有Invalidator
。你明白了。
请注意,在上述某些情况下,您可能希望抛出异常而不是返回无效的Optional
。这是您作为API设计师的决定。