返回Optional <map <string,string =“”>&gt;的真正好处是什么?而不仅仅是一个空的Map <string,string =“”> </string,> </map <string,>

时间:2015-04-18 01:30:07

标签: java java-8 optional

如果我的代码肯定会返回Map<String, String>,但可能是空的。将其转换为返回Optional<Map<String, String>>是否有好处。它会为空的但不是空的实例添加任何好处吗?

1 个答案:

答案 0 :(得分:9)

与计算机编程中的许多科目一样,它取决于(tm)。

我使用optional的方法是替换 null (简而言之)。其中一个advantages是强制调用者认为可能没有返回值,并且这是一个有效的条件......考虑上面链接的答案中的引号:

  

缺少值是一个比 null 更精确的公式

  

您的代码的任何读者或您API的消费者都将遭到殴打,其中可能没有任何内容,并且在访问该值之前需要进行检查。

所以当我看到返回类型签名Optional<Map<String, String>>时,我认为它是一个函数的返回类型,其中空Map可能是一个有效的返回值,但完全没有Map

此示例包括getCachedFavoriteColorsfindInvalidValuePairs等。在前一种情况下,可能没有任何用户会返回空Map - 但可能没有是一个缓存值,它将返回无效的Optional。在第二种情况下,可能没有任何无效值对,这将再次返回空Map,但也可能没有Invalidator。你明白了。

请注意,在上述某些情况下,您可能希望抛出异常而不是返回无效的Optional。这是您作为API设计师的决定。