/**
* 注解定义
* 要定义两个元注解(元注解:注解的注解)
* @Target
* 参数为ElementType数组类型,如果有多个参数,就要定义在大括号{}里面
* 主要参数:
* TYPE(Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。)
* 类、接口(包括注释类型)或枚举声明
* FIELD
* 字段声明(包括枚举常量)
* METHOD
* 方法声明
* @Retention
* 参数为RetentionPolicy类型
* 三个参数:
* SOURCE
* 编译器javac要丢弃的注释(只是提示给开发者,有@Override,@SuppressWarnings)。
* CLASS
* 编译器将把注释记录在类文件(.class)中,但在运行时 VM 不需要保留注释。
* RUNTIME
* 编译器将把注释记录在类文件中(.class),在运行时 VM 将保留注释,因此可以反射性地读取
* (@deprecated,下次调用这个注解标注的方法还会提示这个类已经过时)。
* @author dhh
*
*/
@Target({ElementType.TYPE,ElementType.METHOD}) //只能定义在type(类,接口...)上和方法上
@Retention(RetentionPolicy.RUNTIME)
public @interface MyInnocation {
/**
* 定义一个String返回型的属性
* 用注解的时候就要@MyInnocation(str="xxx")
* 打印效果:
* MyInnocation innocation = AnnocationTest.class.getAnnotation(MyInnocation.class);
* System.out.println(innocation.color());
* @return
*/
String color() default "green";
/**
* 整型
* @return
*/
int num() default 2;
/**
* 看到有时@MyInnocation("xxx")
* 当只有value这一个属性的时候,或者说有多个属性,但是
* 这些属性都定义了default,可以省略"属性名="
* 如果看到@MyInnocation()也不要奇怪,那是因为value属性也定义了default值
* @return
*/
String value();
/**
* 枚举类型,定义在EnumImpl中的枚举
* @return
*/
EnumImpl.Sex sex() default EnumImpl.Sex.FEMALE; //默认为女性
/**
* 定义返回类型为注解的属性
* 引用@MyInnocation(inno=@Override(""))
*/
//Override inno() ;
/**
* 引用的时候如果一个值,可以直接@MyInnocation(nums=3.3f)
* 多个值nums={...}
* @return
*/
float[] nums() default {3.5f,3,3f};
}
定义注解
最新推荐文章于 2024-04-10 13:23:21 发布