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

Eri*_*ric 9 intellij-idea

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

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

public class Taco {
  private String carne_asada;

  public String getCarne_asada() {
    return carne_asada;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

mab*_*aba 13

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

我用属性创建了一个Main类carne_asada:

在此输入图像描述

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

在此输入图像描述

按下Define底部调用的小链接以定义此模板何时有效.然后选择Java | Declaration:

在此输入图像描述

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

VAR         : suggestFirstVariableName("Object")
TYPE        : typeOfVariable(VAR)
CAP_CAM_VAR : capitalize(underscoresToCamelCase(VAR))
Run Code Online (Sandbox Code Playgroud)

订单非常重要,所以VAR必须先行.在我的例子中CAP_CAM_VAR代表Capitalize和CamelCase的VAR变量.在设置Skip if defined根据图像:

在此输入图像描述

现在按,OK然后OK再回到编辑器.

getu键入getu然后按Tab:尝试新的实时模板:

在此输入图像描述

在此输入图像描述

按下Enter并且吸气剂生成已完成:

在此输入图像描述

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

在此输入图像描述

结果很美:

在此输入图像描述

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

希望这有点帮助!


小智 5

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

驼色吸气剂:

#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;
}
Run Code Online (Sandbox Code Playgroud)

骆驼二传手:

#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;
}
Run Code Online (Sandbox Code Playgroud)

如果您希望上述内容能流利地使用,请参阅我的要点。

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

  • 谢谢你!除了Camelized Setter中的一个小错误外,代码均有效。最后一行应该是`$ field.name = $ StringUtil.decapitalize($ name)`,以便您设置的字段与函数的参数匹配。 (2认同)