IntelliJ:为名称中带下划线的字段生成getter / setter

时间:2013-05-29 03:33:40

标签: intellij-idea

有没有办法让IntelliJ更聪明地生成它的getter / setter?特别是,如果字段名称中包含下划线,那么getter是否可以将它们剥离并转换为CamelCase?

例如,我希望下面的getter是getCarneAsada():

public class Taco {
  private String carne_asada;

  public String getCarne_asada() {
    return carne_asada;
  }
}

我找到了Code Style->Java->Code Generation区域,但没有一个选项看起来合适......它不是我要排除的前缀或后缀。它是内心的下划线。

2 个答案:

答案 0 :(得分:13)

您可以使用实时模板来完成此操作。它不能从代码生成中访问,但它仍然很容易使用。

我创建了一个包含属性carne_asada的Main类:

enter image description here

现在在设置中打开Live Templates并在getu下创建一个名为other的新模板:

enter image description here

按下底部名为Define的小链接,以定义此模板何时有效。然后选择Java | Declaration

enter image description here

按下按钮Edit Variables打开一个窗口,可以在其中定义每个实时模板变量。现在创建以下变量:

VAR         : suggestFirstVariableName("Object")
TYPE        : typeOfVariable(VAR)
CAP_CAM_VAR : capitalize(underscoresToCamelCase(VAR))

订单非常重要,因此VAR必须先行。在我的示例中,CAP_CAM_VAR代表Capitalize和CamelCase VAR变量。根据图片设置Skip if defined

enter image description here

现在再次按OKOK返回编辑器。

点击getu,然后按标签,尝试使用新的getu实时模板:

enter image description here

enter image description here

Enter ,getter生成完成:

enter image description here

现在,如果您有更多带下划线的变量,您将获得一个可供选择的列表,所以这是一个例子:

enter image description here

结果很美:

enter image description here

您可以轻松创建相同的setu实时模板,也可以创建一些同时创建它们的sgetu

希望这有点帮助!

答案 1 :(得分:4)

以下是用于生成在IntelliJ IDEA 2016和Android Studio 2.2下工作的getter / setter的模板。

Camelized Getter:

#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
#set($words = $StringUtil.split($name, "_"))
#set($name = "")
#foreach($word in $words)
#set($name = $name + $StringUtil.capitalize($word))
#end
${name}() {
  return $field.name;
}

Camelized Setter:

#set($paramName = $helper.getParamName($field, $project))
#if($field.modifierStatic)
static ##
#end
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#set($words = $StringUtil.split($name, "_"))
#set($name = "")
#foreach($word in $words)
#set($name = $name + $StringUtil.capitalize($word))
#end
void set$name($field.type $StringUtil.decapitalize($name)) {
  #if ($field.name == $paramName)
    #if (!$field.modifierStatic)
      this.##
    #else
      $classname.##
    #end
  #end
  $field.name = $paramName;
}

如果你想要一个流利的getter / setter,请参考我的要点。

https://gist.github.com/k24/72d0be3d76d4eb987c6d4eb1d8f42db2