Java基础(46)自定义注解

news/2025/2/22 17:20:10/

声明自定义注解使用 @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 "JAVA";int age() default 7;
}

如果为注解的成员变量指定了默认值,那么使用该注解时就可以不为这些成员变量赋值,而是直接使用默认值。

public class Test {// 使用带成员变量的注解// MyTag注释的成员变量有默认值,所以可以不为它的成员变量赋值@MyTagpublic void info() {...}...
}

根据注解是否包含成员变量,可以分为如下两类。

  1. 标记注解:没有定义成员变量的注解类型被称为标记注解。这种注解仅利用自身的存在与否来提供信息,如前面介绍的 @Override、@Test 等都是标记注解。
  2. 元数据注解:包含成员变量的注解,因为它们可以接受更多的元数据,所以也被称为元数据注解。

http://www.ppmy.cn/news/102234.html

相关文章

数字化转型,低代码开发真的靠谱?

关于数字化转型,有这么一种定义,即利用数字化技术和能力来驱动企业商业模式创新和商业生态系统重构的一种途径与方法。通俗点说,数字化的核心和目的就是通过数字化技术,实现业务的转型、创新和增长,提供新的营收点与价…

C Primer Plus第十一章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 1.设计并测试一个函数,从输…

不合格机器人工程专业讲师笔记-230529-

工作八年,最大的遗憾,就是对不起学生,对不起同事,对不起领导,各项工作都没有做好。 但是由于个人水平低,能力差,唯一能做的就是在忏悔中不断总结,避免一次又一次失败。 一万句&…

基于stm32mp157 linux开发板ARM裸机开发教程7:Cortex-A7 GPIO 实验(连载中)

前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) 针对对FS-MP1A开发板&…

通用支付系统设计

支付永远是一个公司的核心领域,因为这是一个有交易属性公司的命脉。那么,支付系统到底长什么样,又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构,下述链路和系统组成基本上符合绝大多数支付场景。其实整体可以看成是…

服务(第三十三篇)Zookeeper集群 + Fafka集群

kafka是什么? 是一个分布式的基于发布/订阅模式的消息队列(MQ,Message Queue),主要应用于大数据实时处理领域。 为什么需要消息队列? 主要原因是由于在高并发环境下,同步请求来不及处理&…

游戏运营方法

1. 游戏密钥销售:通过销售游戏密钥来获取收益,时间收费,不充值时间点卡。 2. 游戏礼包销售:通过销售游戏礼包来获取收益,充值折扣3%,股市返利。 3. 角色手办销售:通过销售角色手办来获取收益&…

Check for working CXX compiler using: Visual Studio 10

Check for working CXX compiler using: Visual Studio 10 Check for working CXX compiler using: Visual Studio 10 – works Detecting CXX compiler ABI info Detecting CXX compiler ABI info - done ERRORNeither ‘svn’ nor ‘git’ as SCM found Git branch Build CGA…