IDEA中Date类型getter和setter模版的配置

每种IDE都可以帮忙我们Java开发自动生成POJO中的getter和setter,这是因为它们都有各自的生成模版。

强悍的idea也不例外。
下面是idea生成的一个Pojo类:

    class T{
        private int a;
        private Object b;

        public int getA() {
            return a;
        }

        public void setA(int a) {
            this.a = a;
        }

        public Object getB() {
            return b;
        }

        public void setB(Object b) {
            this.b = b;
        }
    }

默认情况下,idea的getter都是直接获取属性,setter都是直接赋值。

一些人觉得这样满足不了自己的要求,比如给 String 类型的属性赋值是希望 trim() 一下。所以他们修改了模板,看起来是这样的:

    class T {
        private String a;

        public String getA() {
            return a;
        }
        public void setA(String a) {
            this.a = a == null ? null : a.trim();
        }
    }

我今天要说的是Date类型属性的模板

Date类型有什么特殊呢?
因为Date类不是线程安全的,如果直接设置或者获取,可能会引起意想不到的后果。

我们期望Date类型返回它的副本,所以想生成的POJO类是这样的:

    class T {
        private Date a;

        public Date getA() {
            if (a != null) return (Date) a.clone();
            return null;
        }
        public void setA(Date a) {
            this.a = a == null ? null : (Date) a.clone();
        }
    }

怎么配置呢?
假设你知道快捷键是 Alt+insert,然后选择 getter and setter,进去以后点后面的 ... :IDEA中Date类型getter和setter模版的配置进去以后点左上角加号增加一个自己的模板,名字根据自己喜好。
getter模板配置如下:

#if($field.modifierStatic)
static ##
#end
$field.type ##
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#if ($field.boolean && $field.primitive)
    is##
#else
    get##
#end
${name}() {
#if($field.date)
    if ($field.name != null) return (Date)${field.name}.clone();
    return null;
#else
    return $field.name;
#end 
}

setter模板配置如下:

#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
  #if ($field.date)
      $field.name = ${paramName} == null ? null : (Date)${paramName}.clone();
  #else
      $field.name = $paramName;
  #end
}

重点就是其中的 #if ($field.date)

上一篇:学习 IntelliJ IDEA


下一篇:「免费开源」基于Vue和Quasar的crudapi前端SPA项目实战之联合索引(十一)