@interface自定义注解的使用方法

/ Java / 没有评论 / 450浏览
转载请标明出处:
原文首发于: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🇲🇲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🇲🇲ss";