java boolean 变量名_解决当boolean类型的变量命名由is开头时,IDEA自动生成get、set方法的问题...

解决当boolean类型的变量命名由is开头时,IDEA自动生成get、set方法的问题

一、背景

阿里巴巴Java开发手册中对POJO类中布尔类型的变量命名有明确规定

cbd916fb1ff1346d114102894b0cfe06.png

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

说明: 在本文 MySQL 规约中的建表约定第一条,表达是与否的值采用 is_xxx 的命名方式,所以,需要在

设置从 is_xxx 到 xxx 的映射关系。

反例: 定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(), RPC 框架在反向解

析的时候, “误以为” 对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。

主要原因就是在部分框架中这种命名方式会导致部分框架解析错误,但是当我们遇到老系统中已经存在大量不规范的命名时,该如何解决呢?

二、现象

当我们在一个类中定义了Boolean或者boolean类型的变量,并且命名时使用is开头

public class TestVO {

private Boolean isEnable = false;

private boolean isDelete = false;

}

当我们使用IDEA默认的配置生成get、set方法(快捷键:alt+insert)

ceaa0ce4f301e24dcc9331ce7d02e070.png

会得到

public class TestVO {

private Boolean isEnable = false;

private boolean isDelete = false;

public Boolean getEnable() {

return isEnable;

}

public void setEnable(Boolean enable) {

isEnable = enable;

}

public boolean isDelete() {

return isDelete;

}

public void setDelete(boolean delete) {

isDelete = delete;

}

}

我们发现,当变量为Boolean类型时,生成的get、set方法会自动去掉is;当变量为boolean时,get方法变为了

isDelete,set方法自动去掉is。这会导致部分框架在解析的时候报错。

三、解决办法

修改IDEA生成get、set方法的模板,将上述情况下的变量生成时不忽略is。先用快捷键alt+insert打开菜单,点击Getter and Setter

89835c55863926db45696f372089bf1b.png

然后点击Getter template和Setter template后面的按钮,增加自定义模板

24cbca01791616008eb052c6d4c2aef8.png

自定义Getter template为:

#set($paramName = $helper.getParamName($field, $project))

#if($field.modifierStatic)

static ##

#end

$field.type ##

#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))

#if ($field.name == $paramName)

get##

#else

getIs##

#end

${name}() {

return this.##

$field.name;

}

自定义Setter template为:

#set($paramName = $helper.getParamName($field, $project))

#if($field.modifierStatic)

static ##

#end

void ##

#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))

#if ($field.name == $paramName)

set##

#else

setIs##

#end

${name}($field.type $paramName) {

#if (!$field.modifierStatic)

this.##

#else

$classname.##

#end

$field.name = $paramName;

}

点击+号新增即可,Setter template也是一样的操作

195ca8e682c6785ced2a2ef5e4a245cb.png

添加完成后,生成get、set方法时,使用自定义模板即可

f65b19a81ac71fe5f76a2ad7079d7726.png

得到结果为:

public class TestVO {

private Boolean isEnable = false;

private boolean isDelete = false;

public Boolean getIsEnable() {

return this.isEnable;

}

public void setIsEnable(Boolean enable) {

this.isEnable = enable;

}

public boolean getIsDelete() {

return this.isDelete;

}

public void setIsDelete(boolean delete) {

this.isDelete = delete;

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值