转载请标明出处:
原文首发于: http://www.zhangruibin.com
本文出自 RebornChang的博客
厚颜打广告,博主个人博客地址传送门 ,欢迎来访
@interface自定义注解的使用方法
什么是@interface自定义注解?
@interface自定义注解自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。
使用@interface来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
自定义注解的定义规则
自定义注解文件内容格式:
public @interface 注解名 {
定义体
}
注解参数所支持的数据类型:
1.所有Java基本数据类型(int,float,boolean,byte,double,char,long,short)
2.String类型
3.Class类型
4.enum类型
5.Annotation类型
6.以上所有类型的数组
Annotation类型参数设定规则:
第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型;
第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String;
第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号;
第四,如果有多个参数成员,则在定义的时候不设定默认值。
自定义注解和使用注解实例
自定义注解类ExcelVOAttribute.java,封装导出Excel工具类,根据注解获取Excel第一行标题头
package com.oms.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({java.lang.annotation.ElementType.FIELD})
public @interface ExcelVOAttribute {
/**
* 导出到Excel中的名字.
*/
String name();
/**
* 配置列的名称,对应A,B,C,D....
*/
String column();
/**
* 提示信息
*/
String prompt() default "";
/**
* 设置只能选择不能输入的列内容.
*/
String[] combo() default {};
/**
* 日期输出格式
*
* @return
*/
String simpleDateFormat() default "yyyy-MM-dd HH:mm:ss";
/**
* 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
*/
boolean isExport() default true;
}
自定义注解的使用方式
import com.oms.annotation.ExcelVOAttribute;
import com.oms.enums.ReturnResponseStatusEnum;
import lombok.Data;
@Data
public class PersonResultsExcelVo {
@ExcelVOAttribute(name = "姓名", column = "A")
private String name;
@ExcelVOAttribute(name = "身份证号", column = "B")
private String idCard;
@ExcelVOAttribute(name = "性别类型", column = "C")
private MailEnum returnMailEnum;
}
在代码里面对自定义的注解内容尽心获取的方法
先获取到类里面定义的对象集合
//clazz为自定义的实体VO,如PersonResultsExcelVo.java
//通过Class clazz 的getDeclaredFields可以获取到该类的所有自定义的对象集合,此方法由jdk1.1的时候就存在
//对象类型如:...包名路径.PersonResultsExcelVo.orserId。
Field[] allFields = clazz.getDeclaredFields();
遍历自定义对象,使用getAnnotation(ClassName.class)来获取自定义注解类
for (int i = 0; i < allFields.size(); i++) {
Field field = fields.get(i);
ExcelVOAttribute attr = field.getAnnotation(ExcelVOAttribute.class);
// 获得自定义注解@ExcelVOAttribute里面的列号(colum)
String columnString = attr.column();
//获得自定义注解@ExcelVOAttribute里面的名字(name)
String nameString = attr.name();
}
注解元素的默认值
注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null。
例如上文中,自定义注解类中的 String name(); String column();没有设定默认值,则在调用的时候就必须赋值,否则应设定默认值,例如:String simpleDateFormat() default “yyyy-MM-dd HH:mm:ss”;