java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解

本文详细讨论了阿里巴巴开发手册关于POJO类中布尔类型变量不应使用is前缀的规定,原因是某些框架在反序列化时可能出现错误。通过示例展示了不同序列化库如fastJson、jackson和Gson对布尔变量isXxx命名处理的差异,强调了命名不当可能导致的反序列化失败和数据传输问题。最后,建议遵循规范,避免在布尔变量命名中使用is前缀,以确保数据一致性。
摘要由CSDN通过智能技术生成

前言

对应阿里巴巴开发手册第一章的命名风格的第八条。

【强制】 POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。

反例:定义为基本数据类型Boolean isDeleted; 的属性,它的方法名称也是 isDeleted(),

RPC框架在反向解析的时候,“误以为”对应的属性名称是deleted,导致属性获取不到抛出异常。

我对这个反例感觉有点怪怪的,基本数据类型Boolean?而且Boolean生成的getter方法是getXxx(),boolean生成的getter方法是isXxx(),疑惑,不知道是不是手册写错了还是我错了。

我认为这条很重要很重要。前后端传递数据时,就有可能因为布尔类型变量的命名,导致前后端传送数据时传递失败。 因为这个布尔类型的数据解析不一致,在后端该命名是isXxx,而在前端发送表单是传送的数据是isXxx,但是响应时却是Xxx,说明传输到后端时会解析成Xxx(像spring会根据getter和setter来解析POJO类,而当我创建的是isXxx,那么自动生成的getter方法会是isXxx方法,然后解析时会去掉is,所以变成了Xxx),而后端原本是isXxx,导致找不到该属性,所以值也传递不了。

9493ac182adee675b56fed74633147b9.png

c4f89cf994d48fb069b64782cd57bb37.png

所以这是一个致命问题,但是可以避免啊。

详解

在Java中布尔类型有基本数据类型和包装类,所以有四种方式来定义一个布尔类型的变量:

boolean isLive;

boolean live;

Boolean isLive;

Boolean live;

首先来总结上面的区别:

四种中有两种是boolean,而另外两种是Boolean。可不要傻乎乎的说这两个类型是一样的,正确的是它们是有区别的。

四种中有两种变量名是以is开头,另外两种没有。

先根据手册,可得布尔类型的变量命名不使用以is开头的。为什么?

来看看下面代码:

// boolean isLive

class People {

private boolean isLive;

public boolean isLive() {

return isLive;

}

public void setLive(boolean live) {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值