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

时间:2016-02-03 13:04:14

标签: java android-studio intellij-idea code-generation

鉴于我有一个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;
}

1 个答案:

答案 0 :(得分:9)

免责声明:您想要的getter / setter类型违反了命名约定,最佳做法和specifications(请参阅第40页的第7节)。许多库(例如用于序列化或编组的库)需要getFoosetFoo类型的getter和setter,如果您使用所需的getter和setter类型,那些库将无法按预期工作产生

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

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

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

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

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

这是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;
}