注解_自定义注解_属性定义与注解_自定义注解_元注解
注解_自定义注解_属性定义
注解格式:
public @interface 注解名称{
属性列表
}
属性:接口中的抽象方法
要求:
1.属性的返回值类型有下列取值
1.基本数据类型
int show1();
2.String
String show2();
3.枚举
public enum Person {
p1,p2;
}
Person per();
4.注解
MyAnno2 anno2();
5.以上类型的数组
String[] strs();
2定义了属性,在使用时候需要给属性赋值
如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值
如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义即可
数组赋值时,值使用{}包裹。如果数组只有一个值,则{}省略
package day01.Demo01_Day017.JiaoXiao; public @interface MyAnno { int value(); Person per(); MyAnno2 anno2(); String[] strs(); String name() ; }
package day01.Demo01_Day017.JiaoXiao; public enum Person { p1,p2; }
package day01.Demo01_Day017.JiaoXiao; public @interface MyAnno2 { }
package day01.Demo01_Day017.JiaoXiao; @MyAnno(value = 12,name = "莫凡",per = Person.p1,anno2 = @MyAnno2,strs = {"abc","bbb"}) public class Worker { }
注解_自定义注解_元注解
元注解:用于描述注解的注解
@Target
描述注解能够作用的位置
ElementType取值:
TYPE:可以作用于类上
METHOD:可以作用与方法上
FIELD:可以作用于成员变量上
@Retention
描述注解被保留的阶段
@Retention(RetentionPolicy.RUNTIME)当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
@Documented
描述注解是否被抽取到api文档
@Inherited:描述注解是否被子类继承
package day01.Demo01_Day017.JiaoXiao; import java.lang.annotation.*; /** * 元注解:用于描述注解的注解 @Target 描述注解能够作用的位置 @Retention 描述注解被保留的阶段 @Documented 描述注解是否被抽取到api文档 @Inherited:描述注解是否被子类继承 * */ @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface MyAnno3 { }
package day01.Demo01_Day017.JiaoXiao; @MyAnno(value = 12,name = "莫凡",per = Person.p1,anno2 = @MyAnno2,strs = {"abc","bbb"}) @MyAnno3 public class Worker { @MyAnno3 public String name ="aaa"; @MyAnno3 public void add(){ } }