如果A对象为null,那么lambdaQueryWrapper.eq(false, A::getId, a.getId())会报错吗?

文章讲述了在使用MybatisPlus时,由于对LambdaQueryWrapper条件构造的误解,导致了空指针异常。作者分析了代码,指出即使条件为false,后续的card.getId()仍会被执行,当card为null时会抛出异常。作者提醒编程时应注意代码规范,避免类似错误。
摘要由CSDN通过智能技术生成

今天是学习mybatisplus的第二天,又是吸取群里大佬编程技术的一天,废话不多说,先来看一串代码

        Card card=null;
        LambdaQueryWrapper<Card> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        List<Card> cards = cardDao.selectList(lambdaQueryWrapper.eq(card!=null, Card::getId, card.getId()));
        System.out.println(cards);

此时card对象为null,后面的代码会报错吗?(在IDEA里没有标红)

 

 先思考思考再往下看。

我当时回答的不会报错,很显然我又回答错了!我当时想的condition判断的条件为false,后面的应该就不会去执行了吧,但是运行后,idea还是无情的给我返回了个空指针异常

 好的现在来一行一行的解读这个代码

第一行创建了一个空的card对象,第二行构建条件对象,没有问题

第三行开始调用查询,把条件放进去,如果card!=null,这个结果肯定是false,所以这时候还会往下进行吗?估计有一半的人会认为既然已经判断为false了,后面肯定就不运行了呀,但是但是但是,他后面就是会运行!card.getId()也运行了,把card带进去null,可不就是null.getId()?,所以才会报错,就是这里的问题!!!

最后,奉劝大家把代码写规范,养成良好的写代码习惯。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值