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,进去以后点后面的 ... :

进去以后点左上角加号增加一个自己的模板,名字根据自己喜好。
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)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,403评论 8 265
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,173评论 19 139
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,935评论 9 118
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,831评论 1 32
  • 升级为铲屎官快一个月,可以说非常非常开心。小猫长大就像小朋友一样,总是很快就长大了,今天就来记录下这一个月特别有意...
    小蘑菇的树洞阅读 673评论 7 2

友情链接更多精彩内容