【问题标题】:InteliJ Live TemplateIntelliJ 实时模板
【发布时间】:2019-11-11 08:33:29
【问题描述】:

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

@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 模板:

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$);
        }

[![var 设置][1]][1] [1]:https://i.stack.imgur.com/L4YPN.png
但是当我应用自定义设置器时,我的 $CAP_SELECTION$ 和 $SELECTION$ 是空的:

谁能帮我理解我做错了什么? 我也可以突出显示我的成员(双击它)并应用我的 Seeter 吗?就像单击“生成”但插入常规选项一样,我将使用我的实时模板...

【问题讨论】:

    标签: templates intellij-idea live


    【解决方案1】:

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

    这是怎么做的:

    1. 调用Code | Generate(Mac 上为⌘+N)
    2. 在出现的弹出窗口中选择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);
    }
    }
    

    您可能希望完全限定对DocKind 和McpttIterationDocument 的引用。

    1. 点击模板对话框上的OK,然后点击生成getter和setter对话框上的OK

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

    【讨论】:

    • 这是一个完美的解决方案!你真的是一个救生员!
    【解决方案2】:

    您也可以使用“实时模板”。 创建、属性、成员、自定义 getter 和 setter。

    打开智能 点击前置搜索“实时模板” 点击 +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$
    

    使用以下

    参见示例:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2014-10-10
      • 1970-01-01
      • 2016-08-27
      • 2016-07-29
      • 2014-08-24
      相关资源
      最近更新 更多