一、注解概述
/* 自定义注解 1.格式 public @interface 注解名称 { 属性集 } 2.分类 (1)空注解: 没有属性集 */ public @interface MyAnno01 { }
/* 自定义注解 1.格式 public @interface 注解名称 { 属性集 } 2.分类 (2)有属性集的注解 属性的定义格式: 数据类型 属性名称(); //没有默认值 数据类型 属性名称() default 默认值; //有默认值,default后面的内容 (3)属性的类型都有哪些? 8种基本类型,String,枚举(不用),Class类型,注解类型 以及以上任意类型的一维数组 int[] */ public @interface MyAnno02 { String name(); int age() default 18; String[] hobbies();//爱好 MyAnno01 anno();//注解类型 }
/* 3.自定义注解使用的注意事项 1.空注解可以直接使用 2.一个注解只能在一个位置上使用一次,一个位置上可以使用多个不同的注解 3.如果注解有属性 ,那么必须给属性赋值才能使用 键值对的方式赋值 属性名=属性值 多个属性,隔开 如果属性是数组类型 并且只有一个属性值 那么{}可以省略 如果多个属性值 {}不能省略 4.如果属性没有默认值 必须赋值 如果有默认值 可以不赋值 5.如果一个注解中 只有一个属性 并且这个属性叫value 那么赋值时可以省略属性名 尤其要注意的-------------- */ public class Demo07AnnotationNotice { @MyAnno01 //@MyAnno01 //同一个位置,只能使用一次 @MyAnno02(name = "少年攻城狮",hobbies = "学习java",anno = @MyAnno01) @MyAnno03("少年") @MyAnno04 public void method() { } }
/* 5.如果一个注解中 只有一个属性 并且这个属性叫value 那么赋值时可以省略属性名 尤其要注意的-------------- */ public @interface MyAnno03 { String value();//没有默认值 }
public @interface MyAnno04 { String value() default "少年攻城狮";//有默认值 }
自定义注解实例:
/* 定义一个注解:Book - 包含属性:String value() 书名 - 包含属性:double price() 价格,默认值为 100 - 包含属性:String[] authors() 多位作者 */ public @interface Book { String value(); double price() default 100; String[] authors(); }
自定义注解的使用示范:
/* 自定义Book注解并使用案例 定义一个注解:Book - 包含属性:String value() 书名 - 包含属性:double price() 价格,默认值为 100 - 包含属性:String[] authors() 多位作者 */ @Book(value="我爱java系列",price = 1000,authors = {"少年","少女"}) public class Demo08AnnotationBook { @Book(value = "少年启示录",authors = "伟哥") public void method() { } }
原文:https://www.cnblogs.com/hujunwei/p/12616890.html