IntelliJ getter/setter格式

Mar*_*eon 28 java intellij-idea getter-setter

如何让IntelliJ在一行上生成getter/setter,如下所示:

public String getAbc() { return abc; }
Run Code Online (Sandbox Code Playgroud)

代替

public String getAbc() {
   return abc;
}
Run Code Online (Sandbox Code Playgroud)

??

Ale*_*x G 35

我正在使用IntelliJ IDEA 14.1.0,您可以自定义此行为.

只需使用"生成..."选项,或使用Alt+ Insert快捷键,然后选择"Getter和Setter".

在打开的"选择字段"窗口中,顶部有"获取模板"选项.使用下拉列表旁边的"..."按钮编辑模板.

选择"IntelliJ Default"并单击"Copy"按钮创建一个名为"AlwayStartWithGet"的新按钮,您可以对其进行编辑.

只需删除以下部分:

#if ($field.boolean)
  #if ($StringUtil.startsWithIgnoreCase($name, 'is'))
    #set($name = $StringUtil.decapitalize($name))
  #else
    is##
#end
#else
  get##
#end
Run Code Online (Sandbox Code Playgroud)

并用一个简单的替换它

get##
Run Code Online (Sandbox Code Playgroud)

你应该留下:

public ##
#if($field.modifierStatic)
  static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
get##
${name}() {
  return $field.name;
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以在生成代码时使用自定义模板,方法是在getter模板下拉列表中选择它.

  • 确保在一行中检查设置/代码样式/ Java /简单块,在一行中检查简单方法.否则,自动格式化会将线条放回原位,修改模板后看不到任何效果... (4认同)
  • 为我工作,但准确地说,模板的最后一部分应该是这样的:`$ {name}(){return $ field.name; 在一行中 (2认同)

Noe*_*Ang 11

您没有提到您正在使用的IDEA版本,所以我假设最近的8或9.

检查"对齐和大括号"下的代码样式设置.您应该在那里找到"一行中的简单方法"选项.

  • 单行设置告诉IntelliJ将其保留在重新格式化中,但不是以这种方式创建它. (3认同)

laf*_*ste 11

对于2016年的想法.

吸气剂模板

将最后3行合并为一行:

${name}() { return $field.name; }
Run Code Online (Sandbox Code Playgroud)

二传手模板

在最长行的末尾添加双哈希(没有空格):

[...] ($field.type, $paramName) {##
Run Code Online (Sandbox Code Playgroud)

将最后两行合并为一行:

$field.name = $paramName; }
Run Code Online (Sandbox Code Playgroud)

注意:正如@mindas评论的那样,你可能会想要一个没有版本化的视觉自动折叠.


Dav*_*les 10

getter和equals/hashcode都没有模板.这些在IDEA中是硬编码的.

资源

你可以在这个IntelliJ愿望清单中看到

  • 现在有(我使用Ultimate 2016) - 请参阅下面的答案 (7认同)

min*_*das 10

我不知道你为什么要这样做,大概是为了节省视觉空间.如果是这样,只需使用IntelliJ的功能来折叠琐碎的getter/setter,并忘记它是如何行的.可以在中找到折叠功能

设置 - > IDE设置 - >编辑器 - >代码折叠 - >显示代码折叠大纲 - >简单属性访问器


Jac*_*k J 5

Alex G 和 lafuste 提供的答案对我有帮助,但即使您按照这些说明进行操作,IntelliJ 仍可能会自动格式化您的代码。要阻止这种情况发生,请转到“设置”->“编辑器”->“代码样式”->“Java”(或其他语言)。单击标题为“包裹和大括号”的选项卡。在“重新格式化时保留”标题下,单击“一行中的简单方法”旁边的复选框。

为了进一步简洁,您可以消除 getter 和 setter 方法之间的空行。为此,请单击标题为“空白行”的选项卡。在标题为“最小空白行”的部分中,找到“周围方法”旁边的文本框。在文本框中输入 0。

得到

public ##
#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
get##
${name}(){ return $field.name; }
Run Code Online (Sandbox Code Playgroud)

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