Java的自定义注解

这篇具有很好参考价值的文章主要介绍了Java的自定义注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java元注解和自定义注解的区别

Java的自定义注解是一种元数据,可以应用于类、方法、字段等程序元素上,以提供额外的信息或指示。

        自定义注解包括注解声明、元注解、运行时处理器三个部分。注解声明指定了注解的名称、作用域、成员等信息;元注解则用来对注解进行修饰;运行时处理器则负责在程序运行过程中处理注解,并根据注解提供的信息执行相应的逻辑。自定义注解在编写框架、插件等开发时非常常见,可以为代码提供更多的灵活性和可扩展性

自定义注解类可以通过以下步骤使用:

  1. 定义注解类,指定注解的元素和属性。

  2. 在需要使用注解的地方,使用@注解名称来标注目标元素,可以是类、方法、字段等程序元素。

  3. 可以使用反射机制获取注解,并对注解进行处理。

例如,定义一个自定义注解类:

import java.lang.annotation.*;
/**
 * @Description
 * @Author 刘品水
 * @Data 2023/5/5 18:44
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
public @interface MyAnnotation {
    String value() default "";
    int num() default 0;
}

然后在代码中使用该注解:

/**
 * @Description
 * @Author 刘品水
 * @Data 2023/5/5 18:44
 */
@MyAnnotation(value = "Hello 阿水!", num = 1314)
public class MyClass {
    @MyAnnotation("阿水")
    private String name;

    @MyAnnotation(num = 666,value = "闻道有先后,术业有专攻~")
    public void myMethod() {
        // Do something you want to do!
    }

    @MyAnnotation(value = " ")
    public void myMethod2() {
        // Do something you want to do!
    }
}

可以通过反射获取注解并处理:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @Description
 * @Author 刘品水
 * @Data 2023/5/5 18:46
 */
public class MyTest {
    public static void main(String[] args) throws Exception {
        // 获取类上的注解
        MyAnnotation classAnnotation = MyClass.class.getAnnotation(MyAnnotation.class);
        System.out.println("获取类上的注解value值:"+classAnnotation.value()); // 输出:Hello 阿水!
        System.out.println("获取类上的注解num值:"+classAnnotation.num()); // 输出:1314

        // 获取字段上的注解
        Field field = MyClass.class.getDeclaredField("name");
        MyAnnotation fieldAnnotation = field.getAnnotation(MyAnnotation.class);
        System.out.println("获取类上的注解value值:"+fieldAnnotation.value()); // 输出:阿水
        System.out.println("获取类上的注解num值:"+fieldAnnotation.num()); // 输出:0

        // 获取方法上的注解
        Method method = MyClass.class.getDeclaredMethod("myMethod");
        MyAnnotation methodAnnotation = method.getAnnotation(MyAnnotation.class);
        System.out.println("获取myMethod方法上的注解value值:"+methodAnnotation.value()); // 输出:闻道有先后,术业有专攻~
        System.out.println("获取myMethod方法上的注解num值:"+methodAnnotation.num()); // 输出:666

        // 获取方法上的注解
        Method method2 = MyClass.class.getDeclaredMethod("myMethod2");
        MyAnnotation methodAnnotation2 = method2.getAnnotation(MyAnnotation.class);
        System.out.println("获取myMethod2方法上的注解value值:"+methodAnnotation2.value()); // 输出:
        System.out.println("获取myMethod2方法上的注解num值:"+methodAnnotation2.num()); // 输出:0

    }
}

Java的自定义注解

注意:自定义注解类必须要有@Retention和@Target元注解,@Retention指定注解的保留策略,@Target指定注解可以应用到哪些元素上。在这里,我们使用RUNTIME保留策略表示注解在运行时仍然有效,并且使用TYPE和METHOD作为注解的目标元素。

Java自定义注解类使用注意事项

        在使用Java自定义注解类时,需要注意以下几点:文章来源地址https://www.toymoban.com/news/detail-435094.html

  1. 注解元素类型:自定义注解中的元素类型必须是基本数据类型、String、Class、枚举类型或者其他注解类型。

  2. 注解属性默认值和赋值:自定义注解中的属性可以设置默认值,但在使用注解时可以不指定该属性的值。如果需要给属性赋值,则必须按照属性名=属性值的格式进行赋值。

  3. 自定义注解可以使用反射机制来获取和处理,因此要保证注解中的元素符合Java语言规范,不会导致编译错误。

  4. 可以使用元注解@Retention和@Target来指定注解的保留策略和目标范围。一般情况下,@Retention应该设置为RUNTIME,@Target应该根据需要选择适当的目标类型。

  5. 在使用注解时,应该遵循注解的语法规则,即使用 "@" 符号后跟着注解名称,并在括号中指定注解属性和值。如果需要使用多个注解,则可以将它们放在同一个目标元素上,或者使用Java 1.8新增的@Repeatable注解。

        总之,在使用Java自定义注解时,需要遵守Java语法规范和注解的语法规则,注意注解元素类型、属性默认值和赋值、保留策略、目标类型等细节问题,才能保证注解的正确性和有效性。同时也需要理解注解的原理和机制,才能更好地应用自定义注解处理程序逻辑。

到了这里,关于Java的自定义注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用ETLCloud强大的自定义规则实现自定义数据处理算法

    实时数据处理规则有什么作用 ? 在大数据中的实时数据采集、ETL批量数据传输过程中很多数据处理过程以及数据质量都希望实时进行处理和检测并把不符合要求的脏数据过滤掉或者进行实时的数据质量告警等。 在数据仓库建设过程中,每家企业的数据处理过程中肯定会有一

    2024年02月08日
    浏览(50)
  • 基于elasticsearch的自定义业务告警的设计思路,java多线程面试题汇总

    这个是elasticsearch的官方插件,它可以根据数据的变化提供警报和通知,目前是收费的,具体操作配置可以参看官方地址 elastalert 是Yelp公司基于python写的告警框架,大家可以去GitHub上查看具体使用方法。elastalert 自定义开发 自定义开发实现 主要由以下几个步骤实现: 分离出单

    2024年04月25日
    浏览(41)
  • Java|注解之定义注解

    Java语言使用 @interface 语法来定义注解( Annotation ),它的格式如下:  注解的参数类似无参数方法,可以用 default 设定一个默认值(强烈推荐)。最常用的参数应当命名为 value 。 元注解 有一些注解可以修饰其他注解,这些注解就称为元注解 (meta annotation)。Java标准库已经

    2024年02月05日
    浏览(48)
  • 【算法与数据结构】3 知行合一,线性查找的自定义类测试

    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于算法与数据结构体系专栏, 本专栏 对于0基础者极为友好,欢迎与我一起完成算法与数据结构的从0到1的跨越 ☑️首篇详细讲述线性查找法并且对其进行了 初步的优化 :👉传送门

    2023年04月27日
    浏览(48)
  • 【Java基础】注解——自定义注解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 比如我们常见的@Override和@Deprecated都是注解,注解可以加在类、方法、成员变量等上面,类似于给他们“ 打标签 \\\"。 public @interface 注解名{} 看起来和定义接口很相似只是多了一个@符号 接口: public interface 接口名

    2024年02月03日
    浏览(45)
  • YOLO 算法的自定义数据集制作及模型训练方法(附代码)

    本文章主要涉及以下工作:    (1)详细介绍了怎样制作YOLO的自定义数据集以及如何使用自定义数据集训练YOLO模型。    (2)对YOLOv5、YOLOv6、YOLOv7、YOLOv8进行了部分修改,能够适配自定义数据集进行训练。    (3)提供了各YOLO算法的目标检测模型的预训练权重。    (

    2024年02月13日
    浏览(41)
  • Java中的注解,自定义注解

    框架 = 注解 + 反射 + 设计模式 注解( Annotation )是从JDK5.0开始引入,以“@注解名”在代码中存在。 Annotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。还可以添加一些参数值,这些信息被保存在 Annotation 的 “name=valu

    2023年04月16日
    浏览(104)
  • 织梦cms(DEDECMS)通过正则批量查找替换数据库的自定义内容

    例如网站的一个例子 是替换一个div中的内容,摘抄实践下,关键还是自己去体会,多用下正则,还是不错的、正则相关的文章我在我的博客中也多次提到了他的多种运用途径。如果你都掌握好它的话,你的工作效率就会成倍的提高了。下面这个正则的用途是查找数据库的中自

    2024年02月02日
    浏览(50)
  • 【mmaction2 入门教程 04】训练 AVA 数据集中的自定义类别

    在时空行为数据集中,最常出现的就是长尾数据集,即某些类别的动作标签过少,导致训练效果不好,在mmation2当中,提供了一个方法,就是可以自定义要训练的类别。 那么先看看我之前训练的分析结果 上图中,深蓝色的样本数量,浅蓝色的ap值,可以看出,样本极少的类别

    2024年02月02日
    浏览(54)
  • java 元注解||自定义注解的使用

    1. @Retention注解 指定了标记的注解如何存储: RetentionPolicy.SOURCE,标记的注解仅保留在源代码级别,并被编译器忽略。 RetentionPolicy.CLASS,标记的注解在编译时由编译器保留,但被Java虚拟机(JVM)忽略。 RetentionPolicy.RUNTIME,标记的注解由JVM保留,以便运行时环境可以使用。 2. @Do

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包