自定义注解_格式&本质和自定义注解_属性定义
自定义注解:
格式:
public @interface 注解名称{}
本质:注解本质上就是一个接口,该接口默认继承Annotation接口
public interface MyAnno extends java.lang.annotation.Annotation{}
所有注释类型扩展的公共接口。注意,手动扩展这个接口不限定注释类型。还要注意,词接口本身并不定义注释类型。
属性:接口中的抽象方法
要求:
1.属性的返回值类型有一下列取值:
基本数据类型
String
枚举
注解
和以上类型的数组
2.定义了属性,在使用的时候需要给属性赋值
如果定义属性的时候,使用default关键字给属性默认初始化值,则使用注解的时候,可以不进行属性的赋值
如果只有一个属性需要复制,并且属性的名称是value,则value可以省略直接定义值即可
数组赋值的时候使用{}包裹
package com.yang.AnnotationStudy;
@MyAnno(show01 = 5, show02 = "张三", show3 = Person.a, show4 = @MyAnno2)
public class Worker {
}
package com.yang.AnnotationStudy;
public @interface MyAnno {
int show01();
String show02();
Person show3();
MyAnno2 show4();
/*
int[] show5();
String[] show6();
Person[] show7();
MyAnno2[] show8();*/
}
元注解:用于描述注解的注解
@Target:描述注解能够作用的位置
Element取值:
Type:可以作用于类上
Method:可以作用于方法傻姑娘
FIELD:可以作用于成员变量上
@Retention:描述注解被保留的阶段
@Retention(RetentionPolicy.RUNTIME)当前被描述的注解回保留到class字节码文件中,并被JVM读取到
@Documented:描述注解是否欸抽取到api文档中
@Inherited:描述注解是否被子类继承
package com.yang.AnnotationStudy;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@MyAnno2
@MyAnno(show01 = 0, show02 = "a", show3 = Person.a, show4 = @MyAnno2)
@Target({ElementType.TYPE,ElementType.METHOD})//表示该MyAnno3注解只能作用域类上
@Retention(RetentionPolicy.RUNTIME)
@Deprecated
public @interface MyAnno3 {
}