当前位置: 首页 > 后端技术 > Java

Java注解改变编程体验!

时间:2023-04-01 14:51:06 Java

前言长期以来,Java通过在其源代码中使用Javadoc注释标记来支持有限形式的元数据。使用@deprecated或@author等Javadoc标记,我们可以将一些信息添加到类、方法或字段,方法是将信息放在这些项目上方的注释中。在这种情况下,此信息主要对Javadoc文档的生成器有用,因为注释仅存在于Java源代码中。然而,开发人员长期以来一直希望有一种方法可以为其他目的生成元数据。事实上,已经开发了很长时间的工具可以读取注释中的各种Javadoc风格的标签,并用它们做各种事情,包括代码生成和文档。在Java5.0中,一个正式的、可扩展的元数据系统被添加到该语言中,它提供了这种源代码级的功能,以及在运行时使用元数据的新功能。注释定义的基本语法如下。注释定义看起来很像接口定义。importjava.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceIdempotent{}代码中放置注解,前面是注解项,使用@符号后跟类注释的名称。除了@符号,@Idempotent的定义看起来更像是一个空接口。注解的定义还需要一些元注解,比如@Target和@Retention。@Target定义你的注释可以应用的地方(例如方法或字段)。@Retention定义在源代码(SOURCE)、类文件(CLASS)或运行时(RUNTIME)中注释可用的位置。不包含任何元素的注释称为标记注释。比如上例中的@Idempotent就是一个标记注解。下面是一个简单的注解。程序员可以使用此注释来标记满足特定用例的一个方法或一组方法。开发人员在维护项目时可以轻松找到更新的用例,也可以调试系统中的业务逻辑。packagecom.annotation;importjava.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceIdempotent{/***幂等名称,作为redis缓存键的一部分。*/字符串值();/***幂等失效时间(秒),即:在这个时间段内,API是幂等的。*/longexpireMillis()default5;}注意value和expireMillis类似于方法定义。由于该值由编译器进行类型检查,因此将跟踪数据库与用例文档和源代码相关联是一种可靠的方法。如果在注释方法时未给出expireMillis值,则expireMillis元素具有默认值。然后注释的处理器将使用元素的默认值。在下面的类中,三个方法被注释为用例:packagecom.annotation;publicclassTest{@Idempotent(value="test1")publicvoidtest1(){}@Idempotent(value="test2",expireMillis=10)publicvoidtest2(){}}注解的元素在表单中使用时的名称-值对,需要放在@Idempotent声明后的括号中。在test1()方法的注解中,并没有给出description的值,所以@interfaceIdempotent的注解处理器在分析处理这个类的时候会使用元素的默认值。注解不支持继承你不能使用extends关键字来继承@interfaces。如果支持继承,将大大减少打字的工作量,使语法更简洁。在未来的Java版本中,似乎没有任何支持继承的注释提案。StandardAnnotations注解是Java5的新特性,最初有3种标准注解:Override、Deprecated和SupressWarnings,它们都定义在java.lang包中。Override是一种可以应用于方法的标记注解,它告诉编译器该方法是超类中方法的重写。这种注释类型可以防止程序员在重写方法时犯错误。Deprecated是一种标记注释类型,可以应用于方法或类型以指示该方法或类型已被弃用。程序员标记已弃用的方法或类型,以警告编写代码的用户他们不应使用或重写该方法以及使用或扩展该类型。SuppressWarnings表示编译器应该抑制注释类或方法的指定警告类型。元注解Java语言中目前有5种标准注解(前面已介绍),还有5种元注解。元注释用于注释其他注释。大多数时候,程序员定义自己的注解并编写自己的处理程序来处理它们。自定义注释编译器对元素的默认值有点过于挑剔。首先,元素不能有不确定的值。也就是说,该元素要么具有默认值,要么在使用注释时提供该元素的值。这是另一个限制:任何非原始类型元素,无论是在源代码中声明时,还是在带注释的接口中定义默认值时,都不能使用null作为其值。这种限制使得处理器很难表示元素的存在或不存在,因为所有元素都存在并且在每个注释声明中都有相应的值。为了绕过这个约束,你可以自定义一些特殊的值,比如空字符串或者负数来表示某个元素的缺失。//注释/SimulatingNull.javaimportjava.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceCustomAnnotation{intid()default-1;字符串描述()默认"";}这是定义注解的惯用语。总结注解是对Java引入的一个非常受欢迎的补充,它提供了一种结构化的、类型检查的新方法来将元数据添加到您的代码中,而不会使其混乱和难以阅读。Java提供了很少的内置注释。这意味着如果您在别处找不到可用的库,您将不得不自己创建新的注释和相应的处理程序。最后一篇为初学者提供学习指南,对从业者有参考价值。我坚信编码员也有能力产生洞察力。扫描下方二维码关注、学习、交流!