自定义注解的属性定义和元注解
自定义注解的属性定义
属性:接口中的抽象方法
要求:
1、属性的返回值类型
基本数据类型
String
枚举
注解
以上类型的数组‘
枚举:
public enum Person { p1,p2 }
注解:
public @interface MyAnno2 { }
public @interface MyAnno { int show1(); String show2(); Person show3(); MyAnno2 show4(); String[] show5(); }
2、定义了属性,在使用是需要给属性赋值
1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值
2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可
3.数组赋值时,值使用{}包裹。如果数组只有一个值,则 {}省略
public @interface MyAnno { int show1(); //设置mo String show2() default "张三"; Person show3(); MyAnno2 show4(); String[] show5(); }
@MyAnno(show1 = 1,show3 = Person.p1,show4 = @MyAnno2,show5 = {"abc","desf"}) public class Worker { }
自定义注解——元注解
元注解:用于描述注解的注解
1.@Target :描述注解能够作用的位置
ElementType取值:
TYPE:可以作用于类上
METHOD:可以作用于方法上
FIELD:可以作用于成员变量上
2.@Retention:描述注解被保留的阶段
Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
Retention(RetentionPolicy.CLASS):当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取到
Retention(RetentionPolicy.SOURSE):当前被描述的注解,保留到源码中,不会保留到class字节码文件中
3.@Documented:描述注解是否被抽取到api文档中
4.@Inherited:描述注解是否被子类继承
/* 元注解:用于描述注解的注解 1.@Target :描述注解能够作用的位置 ElementType取值: TYPE:可以作用于类上 METHOD:可以作用于方法上 FIELD:可以作用于成员变量上 2.@Retention:描述注解被保留的阶段 Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到 Retention(RetentionPolicy.CLASS):当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取到 Retention(RetentionPolicy.SOURSE):当前被描述的注解,保留到源码中,不会保留到class字节码文件中 3.@Documented:描述注解是否被抽取到api文档中 4.@Inherited:描述注解是否被子类继承 */ @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//表示MyAnno3这个注解只能作用于类上 @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface MyAnno3 { }
@MyAnno(show1 = 1,show3 = Person.p1,show4 = @MyAnno2,show5 = {"abc","desf"}) @MyAnno3 public class Worker { @MyAnno3 public String name = "aaa"; }
package com.example.com.StrengThen.annotation; //Worker类已经被MyAnno3注解了,那么子类Teacher类自动继承该注解 public class Teacher extends Worker{ }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix