Skip to content

IntelliJ IDEA 自定义 getter & setter 模板

🏷️ IntelliJ IDEA

使用 Spring 框架并且使用 Swagger 自动生成接口文档。

使用 @ApiModelProperty 注解给属性设置说明时发现部分 boolean 型的备注都没显示出来。

比如下面属性:

java
@ApiModelProperty("是否锁定")
private boolean isLock;

public boolean isLock() {
    return isLock;
}

public void setLock(final boolean lock) {
    isLock = lock;
}

可以发现 getter&setter 方法跟别的属性不一样,getter 方法名前面没有 getsetter 方法名中 is 被删掉了。

如果改成 getIsLock&setIsLock 方法,则属性说明就能正常显示了。

于是就想到修改对应的模板代码。

class 中点击 Alt + INS 键,选择 getter and setter ,在上部可以看到 Getter TemplaterSetter Templater,点击对应右边的按钮可以打开编辑画面。

为了对比,先看一下默认的 getter&setter 方法的模板代码:

default getter

javascript
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
  #if ($StringUtil.startsWithIgnoreCase($name, 'is'))
    #set($name = $StringUtil.decapitalize($name))
  #else
    is##
#end
#else
  get##
#end
${name}() {
  return $field.name;
}

default setter

javascript
#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
  #if ($field.name == $paramName)
    #if (!$field.modifierStatic)
      this.##
    #else
      $classname.##
    #end
  #end
  $field.name = $paramName;
}

修改之后的模板代码:

customize getter

javascript
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($field.name)))
get##
${name}() {
  return $field.name;
}

customize setter

javascript
#set($paramName = $field.name)
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($field.name))($field.type $paramName) {
  #if ($field.name == $paramName)
    #if (!$field.modifierStatic)
      this.##
    #else
      $classname.##
    #end
  #end
  $field.name = $paramName;
}

使用新模板后生成的代码:

java
public boolean getIsLock() {
    return isLock;
}

public void setIsLock(final boolean isLock) {
    this.isLock = isLock;
}