工作纪实_04-空指针

空指针带来的日常不可避免的一些问题

1.写太多的if-else在程序提交给sona代码质量检测工具的时候,会遇到分析问题,提示方法的复杂度过高

for循环和if-else以及三目运算符都会增加方法的复杂度,复杂度越高,可读性越低

2.随着项目的迭代,项目的方法变得复杂不易读,过多的if-else嵌套非常影响编码格式带来的阅读问题,也会加大重构的难度

规避策略

1.前端传入后台参数时,利用@Valid或者@Validate做参数校验控制

在某些情况下,如果BeanValidator策略无法满足时,我们可以自定义校验策略,通过自定义编写注解校验类

/**
 * @author liulei, lei.liu@htouhui.com
 * @version 1.0
 */
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { PhoneNoValidator.class})
public @interface PhoneNo {

    //默认错误消息
    String message() default "电话号码错误";

    //分组
    Class<?>[] groups() default { };

    //负载
    Class<? extends Payload>[] payload() default { };

    //指定多个时使用
    @Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
    @Retention(RUNTIME)
    @Documented
    @interface List {
        PhoneNo[] value();
    }
}
/**
 * @author liulei, lei.liu@htouhui.com
 * @version 1.0
 */
public class PhoneNoValidator implements ConstraintValidator<PhoneNo, String> {

    @Override
    public void initialize(PhoneNo constraintAnnotation) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (StringUtils.isEmpty(value)) {
            return false;
        }
        if (value.matches(Constants.MOBILE_REGULAR) || value.matches(Constants.FIX_PHONE_REGULAR)) {
            return true;
        }
        return false;
    }
}
	/**
     * 客户联系方式
     */
    @PhoneNo(message = "联系方式格式错误")
    private String mobileNumber;

2.方法在使用到不应为null的参数时,先校验或者断言

// 1.利用assert
ssert param != null;
// 2.利用Objects的静态方法
Objects.nonNull(param, "xxx不能为空")
// 3.guava包的静态方法
Preconditions.checkNotNull等

3.提供公共的避免null取值的方法,最好是写在工具类中

适用于系统特定的一些为null的取值默认策略

4.使用lambda的Option静态方法来替代三目运算符

5.拆解方法体,分散在各个方法中,增强可读性,保留方法的主体处理流程即可

上层思想

1.设计之初,设置好每一个从数据库中的默认值,哪些是必须有的值,少用if-else来判断

2.不建议在实体类的get/set方法来处理null,会影响数据的初始状态,容易产生不可预知的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值