整理经验,提高代码质量

本文探讨了在软件开发中如何正确处理空值问题,建议避免使用null判断,并通过抛出异常来明确业务逻辑要求,确保程序健壮性和易于调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)不要随意增加null判断,通过异常来明确业务要求

下面代码的业务逻辑:如果bspcalendar.getHasProduction()  is true,那么billPeriodService.queryBillPeriod一定有值,这个限制时通过界面控制实现的,这样的话下面的if (billp != null) 判断是没有意义的,由于开发阶段的数据准备问题会导致billPeriodService.queryBillPeriod可能会为空,所以增加if (billp != null) 判断,使得程序不会出现空指针,但如果真得为空了会导致逻辑错误(代码没有报错,但结果不对,给调式问题带来的困难),数据为空的原因是其他代码的错误导致的。更好的做法是如果为空就抛出异常,使得程序中断而不是按错误的路径执行,明确提示开发人员是数据问题导致的,这样开发人员一眼就能知道原因了。并且一定不能为空也是业务逻辑上的要求。

        int month = 1;
        int period = 1;
        BspCalendar bspcalendar = bspCalendarService.queryBspCalendar(param.getYear());
        if (bspcalendar.getHasProduction()) {
            BillPeriod billp = billPeriodService.queryBillPeriod(userInfo.getBspCode(),
                    param.getStartDate());
            if (billp != null) {
                month = praseBillPeriod(billp.getBillPeriod().substring(2))[0];
                period = praseBillPeriod(billp.getBillPeriod().substring(2))[1];
            } 

        } else {
            if (yearHeader.compareTo(param.getStartDate()) > 0) {
                month = 1;
            } else {
                month = DateUtils.getMonth(param.getStartDate());
            }
        }

改进后的代码,增加了为空后的异常。

int month = 1;
        int period = 1;
        BspCalendar bspcalendar = bspCalendarService.queryBspCalendar(param.getYear());
        if (bspcalendar.getHasProduction()) {
            BillPeriod billp = billPeriodService.queryBillPeriod(userInfo.getBspCode(),
                    param.getStartDate());
            if (billp != null) {
                month = praseBillPeriod(billp.getBillPeriod().substring(2))[0];
                period = praseBillPeriod(billp.getBillPeriod().substring(2))[1];
            } else {
                throw new RuntimeException("not exist BillPeriod,it's StartDate is:"
                        + DateUtils.dateToString(param.getStartDate(), "yyyyMMdd"));
            }
        } else {
            if (yearHeader.compareTo(param.getStartDate()) > 0) {
                month = 1;
            } else {
                month = DateUtils.getMonth(param.getStartDate());
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值