阿里为何禁止在对象中使用基本数据类型

本文探讨了阿里禁止在对象中使用基本数据类型的原因,包括防止默认值误导、确保RPC方法参数清晰、避免ORM映射问题以及优化局部变量的运行效率。通过示例详细解释了包装类在POJO类、RPC方法和ORM映射中的必要性,以及基本数据类型在局部变量中使用的优势。
摘要由CSDN通过智能技术生成

前两天,因为一个接口的参数问题,和一位前端工程师产生了一些分歧,需求很简单:

根据一个数值类型(type 取值范围1,2,3)来查询数据,如果没这个值,就是查询所有的数据;

这个需求很常见吧!但是在"没这个值"的问题上,想法不太一样:

  • 接口定义的规范是,查询所有时,那就不传这个type,我后端拿到的就是null,在MyBatis的配置里面,通过if标签,对type判空,来决定是否带type这个条件:
<select id="query" parameterType="java.lang.Integer" resultMap="BaseResultMap">
  select 
  <include refid="Base_Column_List" />
  from order_info where 1 = 1
  <if test="type != null">
    AND TYPE = #{type,jdbcType=INTEGER}
  </if>
</select>
  • 前端工程师的意思是,没有值的话,那我就给你传默认值了,数值类型的默认值是:0,后端就需要根据type是否是0来查询所有;如果这么做,MyBatis中 type 就需要加上大于0的判断
<if test="type != null and type > 0">
    AND TYPE = #{type,jdbcType=INTEGER}
</if>

虽然按着前端的想法,也确实可以实现,但是这个思路,似乎并没有很强的说服力;因为 0 本身就是一个具体的值,并不符合 type 的取值范围,在 Controler 层的参数校验,就应该被干掉;如果某一天因为需求调整,将 0 也表示为某个具体类型之后,这里代码就需要做调整,同时查询所有和查询这个新增 0 的类型就会混淆,前端的展示也会受到影响;

0 和 null 对象在本质上还是有很大区别的;

在各执一词的背景下,我在技术交流群里面和各位大佬简单交流了一下,不想因为的我的执着影响到其他人;

大部分大佬的做法和我想的是一致的!最终也让前端按我的要求做了对应的调整;

那这个问题的根源,还是出在数值类型的默认值上;加上群里面几天讨论了几次相关的一些问题,这里就汇总说一下;

在阿里巴巴Java开发手册中有这样的一条规范,跟我们今天说的问题,也有一些关联:

  • 【强制】所有的 POJO 类属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值