Java 自定义“代码”>`生成`>`IntelliJ中的构造函数

Java 自定义“代码”>`生成`>`IntelliJ中的构造函数,java,intellij-idea,constructor,code-generation,Java,Intellij Idea,Constructor,Code Generation,我想在选择codeGenerate构造函数时,自定义IntelliJ 2017.2生成的参数的命名,以: 将它们标记为final 将Arg附加到每个变量名的末尾。例如,firstNameArg&lastNameArg而不是firstName&lastName 用@NotNull注释每个参数 有没有办法自定义构造函数代码的生成 这个问题类似,但(a)没有提到构造函数,(b)可能已经过时。我认为IntelliJ没有提供这种OOTB。您也许可以使用viaPreferences>Editor>liv

我想在选择
code
Generate
构造函数时,自定义IntelliJ 2017.2生成的参数的命名,以:

  • 将它们标记为
    final
  • Arg
    附加到每个变量名的末尾。
    例如,
    firstNameArg
    &
    lastNameArg
    而不是
    firstName
    &
    lastName
  • @NotNull
    注释每个参数
有没有办法自定义构造函数代码的生成


这个问题类似,但(a)没有提到构造函数,(b)可能已经过时。

我认为IntelliJ没有提供这种OOTB。您也许可以使用via
Preferences>Editor>livetemplates

模板文本:

private final $parameterType$ $parameterName$;

public $constructorClass$(final $parameterType$ $parameterName$$parameterNameSuffix$){
    this.$parameterName$ = $parameterName$$parameterNameSuffix$;
}
将Live模板的“适用性”更改为:

  • Java>声明
  • Java>智能类型完成
单击
编辑变量
,并设置与每个变量关联的
表达式
,如下所示:

  • parameterType:completeSmart()
  • parameterName:suggestVariableName()
  • 构造函数类:className()
  • 参数名称后缀:camelCase(字符串)
以下是一些屏幕截图,展示了它的实际应用:

然而,这种方法有一些警告(其中一些可能是您用例的交易破坏者):

  • 它不能应用于预先存在的类,也就是说,它不能查询一个类,找到它的成员并从中生成构造函数。相反,它是触发类成员声明的一种方式,并且在声明类成员时动态创建构造函数
  • 如果您希望它支持多个类成员/构造函数参数,那么您可能必须为单个arg构造函数创建一个活动模板,然后为两个arg构造函数复制该模板,再次为三个arg构造函数复制该模板,等等

您为什么要这样做?默认参数名称与实际情况相同。很容易手动更改。就我个人而言,我讨厌那种匈牙利命名法。如果你有这么多的参数,手动重命名是一个负担,我会说你的构造函数设计得很糟糕。我认为现在不可能了。顺便说一句,你为什么需要这种功能?为什么是为了避免歧义、避免冲突和可读性。此外,我还编辑了以注意我还希望标记参数
final