空指针异常
用 Optional 处理链式调用
// 使用 Optional 的方式
Optional<User> optional = getUserOptional();
city = optional.filter(User::isValid).map(User::getAddress)
.map(Adress::getCity).orElse("DEFAULT")
用 Objects.equals(a,b) 代替 a.equals(b)
equals方法是 NPE 的高发地点,用 Objects.euqals来比较两个对象,能够避免任意对象为 null 时的 NPE。
使用空对象模式
空对像模式通过一个特殊对象代替不存在的情况,代表对象不存在时的默认行为模式
对象转化
// 问题 1: 自己赋值给自己
userDTO.setName(userDTO.getName());
// 问题 2: 新增字段未赋值
private String address;
// 重构不友好, 当我要删除或修改 UserDO 的字段时, 无法得知该字段是否通过反射被其他字段依赖
BeanUtils.copyProperties(userDO, userDTO);