设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 公司 数据
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Java自定义注解

发布时间:2022-07-15 11:08 所属栏目:51 来源:互联网
导读:前面我们学习了 Java 的基本注解和元注解,如果这两种注解不能满足你的需求,可以自定义注解。下面介绍如何自定义注解。 声明自定义注解使用 @interface 关键字(interface 关键字前加 @ 符号)实现。定义注解与定义接口非常像,如下代码可定义一个简单形式
  前面我们学习了 Java 的基本注解和元注解,如果这两种注解不能满足你的需求,可以自定义注解。下面介绍如何自定义注解。
 
  声明自定义注解使用 @interface 关键字(interface 关键字前加 @ 符号)实现。定义注解与定义接口非常像,如下代码可定义一个简单形式的注解类型。
  // 定义一个简单的注解类型
  public @interface Test {
  }
  上述代码声明了一个 Test 注解。默认情况下,注解可以在程序的任何地方使用,通常用于修饰类、接口、方法和变量等。
 
  定义注解和定义类相似,注解前面的访问修饰符和类一样有两种,分别是公有访问权限(public)和默认访问权限(默认不写)。一个源程序文件中可以声明多个注解,但只能有一个是公有访问权限的注解。且源程序文件命名和公有访问权限的注解名一致。
 
  不包含任何成员变量的注解称为标记注解,例如上面声明的 Test 注解以及基本注解中的 @Override 注解都属于标记注解。根据需要,注解中可以定义成员变量,成员变量以无形参的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型。代码如下所示:
  public @interface MyTag {
      // 定义带两个成员变量的注解
      // 注解中的成员变量以方法的形式来定义
      String name();
      int age();
  }
  以上代码中声明了一个 MyTag 注解,定义了两个成员变量,分别是 name 和 age。成员变量也可以有访问权限修饰符,但是只能有公有权限和默认权限。
 
  如果在注解里定义了成员变量,那么使用该注解时就应该为它的成员变量指定值,如下代码所示。
  public class Test {
      // 使用带成员变量的注解时,需要为成员变量赋值
      @MyTag(name="xx", age=6)
      public void info() {
          ...
      }
      ...
  }
  注解中的成员变量也可以有默认值,可使用 default 关键字。如下代码定义了 @MyTag 注解,该注解里包含了 name 和 age 两个成员变量。
  public @interface MyTag {
      // 定义了两个成员变量的注解
      // 使用default为两个成员变量指定初始值
      String name() default "C语言中文网";
      int age() default 7;
  }
  如果为注解的成员变量指定了默认值,那么使用该注解时就可以不为这些成员变量赋值,而是直接使用默认值。
  public class Test {
      // 使用带成员变量的注解
      // MyTag注释的成员变量有默认值,所以可以不为它的成员变量赋值
      @MyTag
      public void info() {
          ...
      }
      ...
  }
  当然也可以在使用 MyTag 注解时为成员变量指定值,如果为 MyTag 的成员变量指定了值,则默认值不会起作用。
 
  根据注解是否包含成员变量,可以分为如下两类。
  标记注解:没有定义成员变量的注解类型被称为标记注解。这种注解仅利用自身的存在与否来提供信息,如前面介绍的 @Override、@Test 等都是标记注解。
  元数据注解:包含成员变量的注解,因为它们可以接受更多的元数据,所以也被称为元数据注解。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读