如何从 IntelliJ getter/setter 生成中删除“get”和“set”



鉴于我有一个POJO,如下所示:

public class Person {
    private String name;
}

如何让 IntelliJ 生成没有前缀 getset 的 getter 和 setter?

要获得此内容:

public String name() {
    return this.name;
}
public void name(String name) {
    this.name = name;
}

取而代之的是:

public String getName() {
    return this.name;
}
public void setName(String name) {
    this.name = name;
}

免责声明:您想要的 getter/setter 类型违背了命名约定、最佳实践和规范(请参阅第 40 页开始的第 7 节(。许多库(例如用于序列化或封送的库(需要getFoosetFoo类型的 getter 和 setter,如果使用要生成的 getter 和 setter 类型,这些库将无法按预期工作。

话虽如此,可以在 IntelliJ 中更改默认的 getter/setter 生成。

如您所知,您可以选择 Code| IntelliJ 菜单栏生成,或使用 Alt+Ins 快捷方式调出"生成"窗口。从那里,您可以选择 Getter、Setter 或 Getter and Setter。当您选择其中一个选项时,将打开一个对话框,用于选择模板以及要为其生成 getter/setter 的字段。

如果选择模板下拉列表旁边的"...">,它将打开一个单独的模板管理对话框。

我建议使用复制图标或 Ctrl+D 快捷方式复制 IntelliJ 默认模板,并为新模板指定不同的名称,例如"仅变量名称"。

然后,您可以修改模板以满足您的需求。

以下是 IntelliJ 默认 getter 模板:

public ##
#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;
}

您应该能够完全删除布尔检查,因为对于模板,方法名称不依赖于变量的类型。以下模板应为您提供所需的 getter:

public ##
#if($field.modifierStatic)
  static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#set($name = $StringUtil.decapitalize($name))
##
${name}() {
  return $field.name;
}

这应该给你所需的二传手:

#set($paramName = $helper.getParamName($field, $project))
public ##
#if($field.modifierStatic)
  static ##
#end
void $StringUtil.decapitalize($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;
}

最新更新