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