nullPointerException除非e.getKey()返回,否则下面的代码会得到吗nullMap<Integer, Optional<SecurityAttributeChange>> spnCreationDetails;Optional.ofNullable(spnCreationDetails.get(e.getKey()).orElse(new SecurityAttributeChange()).getNewAttribute())                                    .orElse(new SecurityAttr())                                    .getUserName());我在这一行中遇到了 NPE,是否可以调试它?我知道spnCreationDetails.get(e.getKey())返回 null,我null在这里处理时遗漏了什么吗?- 编辑这是几乎完整的方法,它将有助于提供有关如何重构它以使其可读的输入。private void updateAuditFields(List<SecurityAttributeChange> securityChanges, Map<Integer, Map<String, Object>> result) {    Map<Integer, Optional<SecurityAttributeChange>> spnModificationDetails = ...    Map<Integer, Optional<SecurityAttributeChange>> spnCreationDetails = ...    result.entrySet().stream().forEach(e -> {        e.getValue()                .put("userIdLastChanged",                        Optional.ofNullable(Optional.ofNullable(spnModificationDetails.get(e.getKey()))                                .orElse(Optional.of(new SecurityAttributeChange()))                                .get()                                .getNewAttribute()).orElse(new SecurityAttr()).getUserName());        e.getValue()                .put("lastChangedDatetime",                        Optional.ofNullable(Optional.ofNullable(spnModificationDetails.get(e.getKey()))                                .orElse(Optional.of(new SecurityAttributeChange()))                                .get()                                .getNewAttribute()).orElse(new SecurityAttr()).getKnowledgeBeginDate());        e.getValue()                .put("userIdCreated", Optional.ofNullable(                        Optional.ofNullable(spnCreationDetails.get(e.getKey())).orElse(Optional.of(new SecurityAttributeChange())).get().getNewAttribute())                        .orElse(new SecurityAttr())                        .getUserName());    });}
                    
                    
                1 回答
                            泛舟湖上清波郎朗
                            
                                
                            
                        
                        
                                                
                    TA贡献1818条经验 获得超3个赞
如果spnCreationDetails.get(e.getKey())可以为空,您可能需要:
Optional.ofNullable(spnCreationDetails.get(e.getKey())) .orElse(new SecurityAttributeChange()) .getNewAttribute() .orElse(new SecurityAttr()) .getUserName();
iespnCreationDetails.get(e.getKey())应该用Optional.
编辑:看到您的评论,spnCreationDetails.get(e.getKey())可以返回 anull或 an Optional<SecurityAttributeChange>,因此最好只将 thenull转换为 new Optional:
spnCreationDetails.getOrDefault(e.getKey(),Optional.empty()) .orElse(new SecurityAttributeChange()) .getNewAttribute() .orElse(new SecurityAttr()) .getUserName();
添加回答
举报
0/150
	提交
		取消
	