Java中使用Optional的map操作却不使用其返回值是否为正确写法
结论先行:这种写法是错误的,属于对Optional API的典型误用
你现在的写法有两个核心问题:
map方法的设计语义是无副作用的值转换,开发者看到map的第一反应是你需要获取转换后的新Optional值,你拿它执行修改原对象的副作用逻辑还丢弃返回值,会严重降低代码可读性,给后续维护的人造成误解- 为了满足
map的语法要求被迫写无实际用途的return语句,产生了完全没必要的冗余代码
正确写法二选一即可:
方案1:直接取对象操作(你已经提前校验过非空,完全安全)
// 此处你已经提前确认optionalData非空,get不会抛出空指针 var artData = optionalData.get(); Map<String, Object> currentData = artData.get(idKey); artData.remove(idKey); artData.put(getId(previousData), currentData);
方案2:用ifPresent执行非空副作用逻辑(不需要写return)
如果后续有可能去掉前置非空校验,用ifPresent更符合Optional的API语义,专门用于非空时执行逻辑:
optionalData.ifPresent(artData -> { Map<String, Object> currentData = artData.get(idKey); artData.remove(idKey); artData.put(getId(previousData), currentData); });
内容的提问来源于stack exchange,提问作者Fllappy
相关产品推荐
相关产品推荐

