修改自動生成get/set方法模板程式碼

倩倩_糖葫蘆發表於2018-01-11

今天看到 面對介面髒資料你還在V層if str==null else setText? 一文,覺著寫得挺好,開發過程中多思考多動手,會帶來意想不到的效果。底下評論大家也都說了各自的方法和見解,文中有一些問題作者後來也解決了,看到評論裡有人說:

image.png

說到配置as,就可以實現在建立bean時自動生成return xx==null?"":xx; 覺著很好,因為我覺著這是一種挺簡單的方法,但是就如同底下人問了怎麼配置呀,我也不知道,於是我就在自己as工具裡新建了一個bean物件,按住alt+insert新增get/set方法,發現瞭解決辦法。如下圖:

image.png

平時手快也沒注意,今天仔細看了看,那上面的意思不就是,get 方法模組,set方法模板嗎,後面跟著 IntelliJ Default大概就是預設的生成模板吧,點選後面的三個點 按鈕進去看看,如下:

image.png

這是set的,get方法也類似是這樣的,大概也能看懂,想著是不是可以直接模板就好了,發現無法修改,後來又發現左上角的+號,原來是自己可以新建一個模板,然後再生成的時候選擇自己的模板就好了,如我們在get模板中新建一個自己的模板:

image.png

image.png

我們知道我們只需要改一下最後get方法return那個地方的程式碼,也就是這兒:

image.png

不確定是不是,我們可以在後面跟著一個“#”號試試:

${name}() {
  return $field.name+"#";
}
複製程式碼

在生成的時候選擇我們自定義的模板:

image.png

發現最後生成的程式碼:

    public String getAge() {
        return age + "#";
    }

    public void setAge(String age) {
        this.age = age;
    }

複製程式碼

這樣證明確定是這樣的,那麼我麼可以繼續進行真正的判斷了: 我們先把這個預設裡的get方法程式碼拷貝到 MyGetter中,我們再根據我們自己的需要修改模板程式碼,其它地方不變,就修改需要修改的地方: 我們想要實現這樣的:return xx==null?"":xx,Ok ,那麼我認為大概是這麼寫的,注意我們只對String型別的欄位進行判斷,在此我修改下:

${name}() {
   return $field.name == null ? "" : $field.name;
}
${name}() {
    #if($field.String)
        return $field.name == null ? "" : $field.name;
    #else
         return $field.name;
     #end
}

複製程式碼

我們對比一個default的寫法:

${name}() {
  return $field.name;
}
複製程式碼

好的,我們再繼續生成一下:

public String getAge() {
        return age == null ? "" : age;
    }

    public void setAge(String age) {
        this.age = age;
    }
複製程式碼

好的,達成效果,耶,居然還可以這麼玩,以後可根據自己需求自行修改,謝謝大家。

相關文章