Java开发中如何更优雅地处理PuppyResponse类的vet字段空值问题
PuppyResponse 类空值场景优化方案
核心优化逻辑是利用Optional的函数式API替代显式的if-else分支判断,同时删除冗余的部分参数构造方法,直接复用Lombok生成的全参构造方法,空的关联字段直接传null即可,类上已添加的@JsonInclude(JsonInclude.Include.NON_NULL)注解会自动忽略序列化时的null值,和原有业务逻辑完全兼容。
优化后的完整代码如下:
@Getter @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PUBLIC) @JsonInclude(JsonInclude.Include.NON_NULL) public class PuppyResponse { private Long puppyId; private String name; private Integer age; private String breed; private Long vetId; private String vetName; public static PuppyResponse of(Puppy puppy) { Optional<Vet> vetOpt = Optional.ofNullable(puppy.getVet()); return new PuppyResponse( puppy.getPuppyId(), puppy.getName(), puppy.getAge(), puppy.getBreed(), vetOpt.map(Vet::getVetId).orElse(null), vetOpt.map(Vet::getName).orElse(null) ); } public static List<PuppyResponse> listOf(List<Puppy> puppies) { return puppies.stream() .map(PuppyResponse::of) .collect(Collectors.toList()); } }
主要优化点
- 删除了冗余的4参数自定义构造方法,减少重复代码,仅通过Lombok生成的全参构造完成实例创建
- 抛弃了
Optional.isPresent()加if-else的命令式写法,用Optional.map()处理非空场景的属性提取,orElse(null)统一处理空值场景,天然规避空指针异常 - 代码逻辑更连贯,可读性更高,后续如果需要新增字段也无需额外修改分支逻辑,可维护性更强
内容的提问来源于stack exchange,提问作者Hyeonjun Park
相关产品推荐
相关产品推荐

