在上一篇文章中,我们实现了了自定义注解导出excel及对date类型和枚举类型进行处理。虽然效果是出来了,但是还是有问题的。
问题分析:
1:在处理date类型及枚举类型的时候,很麻烦,需要好几个属性配合这使用。如果忘了其中的一个就会导致错。如下图:
![3ba53e39931123aae0ff8cb4a7ceafa8.png](https://i-blog.csdnimg.cn/blog_migrate/d8aba6429fb4daded850ec6778180d14.jpeg)
还记的在《Java中注解学习系列教程-3》中我们知道,自定义注解的成员属性还可以是一种特殊的类型:Annotation的。也就是在注解中使用注解。
所以我们根据这个特性来处理:
将日期类型转换及枚举类转换封装到两个不同的注解中。
一:封装枚举类的注解
1.1:在我们自定义excel解析的注解ExcelAnnotation类中定义解析枚举类的注解。如下图:
/**
* 声明枚举类解析对象
* @return
*/
public abstract EnumCode2Description[] EnumCode2Description() default {};
/**
* 枚举类 code转 description
*/
@Retention(RetentionPolicy.RUNTIME)
@Target( {})
public @interface EnumCode2Description{
/**
* 调用枚举列的方法名称
* @return
*/
public abstract String methodName();
/**
* 调用枚举类方法的参数
* @return
*/
public abstract Class methodArgClass() default Integer.class;
/**
* 枚举类
* @return
*/
public abstract Class clazz();
}
![912fbb1e265ce074b017b56eb010b985.png](https://i-blog.csdnimg.cn/blog_migrate/b2cc8599d688030b02259914df41ff20.jpeg)
![58e0fdca1a613182c13b19668f5e02f1.png](https://i-blog.csdnimg.cn/blog_migrate/23bfb1508923c932bb8f38e1dbcf484a.jpeg)
1.2:在实体对象中使用该注解
![7b068ebb6766b24a9479d63ba82c1300.png](https://i-blog.csdnimg.cn/blog_migrate/50bb4a050dc7bd7321c1c862433e00bc.jpeg)
1.3:解析注解中处理
![2bbd0d32acdd208c02c42c61091b3f27.png](https://i-blog.csdnimg.cn/blog_migrate/d85a404eedabc4d0de6f99970f81c060.jpeg)
二:日期格式化封装
2.1:在自定义注解中定义日期格式注解
/*** 声明解析日期封装对象* @return*/public abstract myDateFormat2Pattern[] myDateFormat2Pattern() default {};/*** 日期格式化-封装注解*/@Retention(RetentionPolicy.RUNTIME)@Target({})public @interface myDateFormat2Pattern{public abstract String pattern() ;public abstract boolean isDateFormate() ;}
![287b752db548662bdbfdf1988f4c99ee.png](https://i-blog.csdnimg.cn/blog_migrate/a34fbca7539edc7111cbea379fb336d0.jpeg)
2.2:定义格式对象为成员属性
2.3:使用封装后的日期注解
![5a92901e7f1400b7b868cc604b6298d8.png](https://i-blog.csdnimg.cn/blog_migrate/6f792d139c70ca9c4c8775522b5e3365.jpeg)
2.4:解析封装的日期注解
代码以放git上了。