IntelliJ 实时模板

InteliJ Live Template

我有一个关于 inteliJ 实时模板的问题, 我的 class 中有一个成员:

@JsonProperty("CA_DL_Active_Carriers_NR_SM_DL_UE1")
    private Float caDlActiveCarriersNrSmDlUe1;

我想创建一个 getter 和 setter(自定义 setter),如下所示:

  public Float getCaDlActiveCarriersNrSmDlUe1() {
        return caDlActiveCarriersNrSmDlUe1;
    }



   public void setCaDlActiveCarriersNrSmDlUe1(Float caDlActiveCarriersNrSmDlUe1) {
        if (Objects.equals(getCaDlActiveCarriersNrSmDlUe1(), caDlActiveCarriersNrSmDlUe1)) {
            return;
        }
        this.caDlActiveCarriersNrSmDlUe1 = caDlActiveCarriersNrSmDlUe1;
        if (DocKind.ORIG == docKind) {
            ((McpttIterationDocument) prepareDirtyDocument()).setCaDlActiveCarriersNrSmDlUe1(caDlActiveCarriersNrSmDlUe1);
        }

我为 setter 创建了一个 Live Templeate:

public void set$CAP_SELECTION$(java.lang.Float $SELECTION$) {
        if (java.util.Objects.equals(get$CAP_SELECTION$, $SELECTION$)) {
            return;
        }
        this.$SELECTION$ = $SELECTION$;
        if (com.att.tlv.arc.backend.api.persistence.documents.BaseDocument.DocKind.ORIG == docKind) {
            (($CLASSNAME$) prepareDirtyDocument()).set$CAP_SELECTION$($SELECTION$);
        }

[![变量设置][1]][1] [1]: https://i.stack.imgur.com/L4YPN.png
但是当我应用自定义 setter:

时,我的 $CAP_SELECTION$ & $SELECTION$ 是空的

谁能帮我弄清楚我做错了什么? 我还可以突出显示我的成员(双击它)并应用我的 seeter 吗?喜欢点击 "generate" 但不是常规选项 , 我将使用我的实时模板...

要创建自定义 setter,最好使用 Code | Generate 操作。您可以在那里添加自定义 getter 或 setter 模板来创建您想要的方法。

这是要做的事情:

  1. 在 Mac 上调用 Code | Generate+N
  2. Select Getter and Setter 在出现的弹出窗口中
  3. 单击 Setter 模板下拉菜单后的 ... 按钮
  4. 使用 + 按钮添加新模板
  5. 添加类似于以下模板文本的内容并为其命名:
#set($paramName = $helper.getParamName($field, $project))
#set($methodSuffix = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if($field.modifierStatic)
static ##
#end
void set$methodSuffix($field.type $paramName) {
if (java.util.Objects.equals(get$methodSuffix(), $paramName)) {
return;
}
#if ($field.name == $paramName)
    #if (!$field.modifierStatic)
    this.##
    #else
        $classname.##
    #end
#end
$field.name = $paramName;
if (DocKind.ORIG == docKind) {
((McpttIterationDocument) prepareDirtyDocument()).set$methodSuffix($paramName);
}
}

您可能希望完全限定对 DocKindMcpttIterationDocument 的引用。

  1. 单击模板对话框中的 OK,然后单击生成 getters 和 setters 对话框中的 OK

结果:一个可重复使用的自定义 setter 模板。

您也可以使用 "Live Template"。 创建 , 属性 , 成员 , 自定义 getter & setter .

打开intelij 点击偏好搜索 "live templates" 单击 +m 并添加您的模板。

使用下面的代码:

@JsonProperty("$SELECTION$") 私人 $ELEMENT_TYPE$ $TOLOWER$;

public $ELEMENT_TYPE$ get$CAP_SELECTION$() {
    return $TOLOWER$;
}

public void set$CAP_SELECTION$($ELEMENT_TYPE$ $TOLOWER$) {
        if (java.util.Objects.equals(get$CAP_SELECTION$(), $TOLOWER$)) {
            return;
        }
        this.$TOLOWER$ = $TOLOWER$;
        if (com.att.tlv.arc.backend.api.persistence.documents.BaseDocument.DocKind.ORIG == docKind) {
            (($CLASSNAME$) prepareDirtyDocument()).set$CAP_SELECTION$($TOLOWER$);
        }


    $END$

使用以下

参见示例: