六、自定义注解

一、自定义注解的语法

使 用 @interface 定 义 自 定 义 注 解 时 , 自 动 继 承 了 java.lang.annotation.Annotation 接口

1) @interface 用来声明一个注解

2) 其中的每一个方法实际上是声明了一个配置参数

a) 方法的名称就是参数的名称

b) 返回值类型就是参数类型(返回值类型只能是基本 类型、Class、String、enum)

c) 可以通过 default 来声明参数的默认值 d) 如果只有一个成员,一般参数名为 value

注意事项:

  • 注解元素必须要有值。我们定义注解元素时,经 常使用空字符串,0 作为默认值。
  • 也经常使用负数(比如-1)表示不存在的含义

二、 元注解

        元注解的作用就是负责注解其他注解。在 Java 中定义了 4 个标准的 meta-annotation 类型,它们被用来提供对其它 annotation 类型作说明

        这些类型和它们所支持的类在java.lang.annotation包中可以找到

1) @Target 2) @Retention 3) @Documented 4) @Inherited

三、@Target

作用:用于描述注解的使用范围(即被描述的注解可以用在什 么地方)

 举例:@Target(value=ElementType.TYPE)

四、@Retention 

作用:表示需要在什么级别保存该注解信息,用于描述注解的生命周期

 自定义注解一:

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

/**
 * ClassName:MyAnnotation
 * date: 2020/4/16 10:25
 *
 * @author 王鼎禹
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface MyAnnotation {
    String stuName() default "";  //方法的名称就是参数的名称stuName()
                                  // 返回值类型就是参数类型(返回值类型只能是基本 类型、Class、String、enum)
                                  //default 来声明参数的默认值,经常使用空字符串,0作为默认值
    int age() default 0;
    String [] school() default {"B站大学","清华大学"};

}

自定义注解二:

 1 import java.lang.annotation.ElementType;
 2 import java.lang.annotation.Retention;
 3 import java.lang.annotation.RetentionPolicy;
 4 import java.lang.annotation.Target;
 5 
 6 /**
 7  * ClassName:MyAnnotation2
 8  * date: 2020/4/16 10:31
 9  *
10  * @author 王鼎禹
11  */
12 @Target({ElementType.TYPE,ElementType.METHOD})
13 @Retention(RetentionPolicy.RUNTIME)
14 public @interface MyAnnotation2 {
15     String value();  //如果只有一个成员,一般参数名为 value
16 }
 1 //@MyAnnotation 该注解只能应用到方法上
 2 //@MyAnnotation2(value="aaaa")
 3 @MyAnnotation2("aaa")
 4 public class Test5 {
 5     @MyAnnotation(stuName = "王一一")
 6     public static void show(){
 7     }
 8     @MyAnnotation(stuName = "乔二二",age = 23,school = {"家里蹲大学","蓝翔大学"})
 9     public void method(){
10 
11     }
12 }
原文地址:https://www.cnblogs.com/qiaoxin11/p/12711200.html