元注解

元注解的作用是解释注解其他注解,java定义了4个标准的metaannotation类型,它们被用作对其他的annotation类型说明。元注解分类如下:

  • @Target:用于描述注解的使用范围
  • @Retention:表示需要在什么级别保存注解信息,用于描述注解的声明周期,其中SOURCE<CLASS<RUNTIME
  • @Document:说明该注解将包含在javadoc中
  • @Inherited:说明子类可以继承父类中的该注解

自定义注解,使用元注解修饰,【AnnotationTest.java】

package day15;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@interface AnnotationTest {

}

class Test01 {
    //注解可以显示赋值,如果没有默认值就必须给注解赋值
    @AnnotationTest1(name = "huahua", sclass = {})
    public void Test01() {

    }

    //如果注解只有一个参数,且为value时可以省略参数名,其他参数名不可以省略
    @AnnotationTest2("")
    public void test02() {  //一个类中方法不能有多个public修饰

    }
}

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationTest1 {
    //注解的参数,类型+参数名()[default 默认值]
    String name() default "";

    int age() default 0;

    int id() default -1;

    String[] sclass();
}

/*注解的使用范围有:TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、
ANNOTATION_TYPE、PACKAGE、TYPE_PARAMETER、TYPE_USE
*/
@Target({ElementType.METHOD, ElementType.TYPE})
//注解的声明周期有:SOURCE、CLASS、RUNTIME
@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationTest2 {
    //注解的参数,类型+参数名()[default 默认值]
    String[] value();
}
上一篇:观察者模式 vs 发布订阅模式


下一篇:美团90%会被问到的问题设计模式之观察者模式