常见 Java 代码缺陷及规避方式

空指针异常

用 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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值