解决变量名前缀为is的IDEA自动生成getter和setter出现的问题

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

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

阿里巴巴Java开发手册

【强制】 POJO 类中布尔类型变量都不要加 is 前缀,否则部分框架解析会引起序列化错误。
说明: 在本文 MySQL 规约中的建表约定第一条,表达是与否的值采用 is_xxx 的命名方式,所以,需要在设置从 is_xxx 到 xxx 的映射关系。
反例: 定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(), RPC 框架在反向解析的时候, “误以为” 对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
主要原因就是在部分框架中这种命名方式会导致部分框架解析错误,但是当我们遇到老系统中已经存在大量不规范的命名时,该如何解决呢?

二、现象

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

    private Boolean isEnable = false;
    private boolean isDelete = false;
}

//当我们使用IDEA默认的配置生成get、set方法(快捷键:alt+insert)
在这里插入图片描述
会得到

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
在这里插入图片描述
然后点击Getter template和Setter template后面的按钮,增加自定义模板
在这里插入图片描述
自定义Getter template为:

#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为:

#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也是一样的操作

在这里插入图片描述
添加完成后,生成get、set方法时,使用自定义模板即可

在这里插入图片描述

得到结果为:

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;
    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值