• 面试:注解类型有哪些,如何自定义注解


    注解的分类_行走在青春路上的小蜜蜂的博客-CSDN博客_注解类型

    注解的分类

    注解主要分为三大类:普通注解、元注解、自定义注解,下面来详细梳理一下这三大类注解。

    一、普通注解

    普通注解,常见的主要有三个 :@Override(子类对父类方法的重写)、@Deprecated(注解过期、废弃的方法或者类等。若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用。)、@SuppressWarnings(忽略编译器的警告信息)

    二、元注解

    元注解说白了就是用来注解其他注解的注解。

    Java中总共有5种元注解:@Retention,@Documented,@Target,@Inherited,@Repeatable

    (1)@Retention

    用来说明注解的存活时间,有三种取值:

    RetentionPolicy.SOURCE:注解只在源码阶段保留,编译器开始编译时它将被丢弃忽视
    RetentionPolicy.CLASS:注解会保留到编译期,但运行时不会把它加载到JVM中
    RetentionPolicy.RUNTIME:注解可以保留到程序运行时,它会被加载到JVM中,所以程序运行过程中可以获取到它们

    (2) @Documented

    这个注解跟文档相关,它的作用是能够将注解中的元素包含到Javadoc中去,应该被JavaDoc所记录。

    (3)@Target

    用来说明注解的目标,有以下取值:

    ElementType.PACKAGE:可作用在包上
    ElementType.TYPE:可作用在类、接口、枚举上
    ElementType.ANNOTATION_TYPE:可以作用在注解上
    ElementType.FIELD:可作用在属性上
    ElementType.CONSTRUCTOR:可作用在构造方法上
    ElementType.METHOD:可作用在方法上
    ElementType.PARAMETER:可作用在方法参数上
    ElementType.LOCAL_VARIABLE:可作用在局部变量上,例如方法中定义的变量
    ElementType.TYPE_PARAMETER:可作用在类参数的声明上      Since jdk1.8以后添加的
    ElementType.TYPE_USE:可作用在使用的类型    Since jdk1.8以后添加的

    三、自定义注解

    自定义运行时注解分为两步:声明注解、解析注解。

    自定义注解,是以元注解为基础注解自己定义的注解,现在我们来一起来写一个自定义注解的例子:

    (1)声明注解

    1. @Target(ElementType.FIELD)
    2. @Retention(RetentionPolicy.RUNTIME)
    3. public @interface Animal {
    4. int value() default 5;
    5. }

    上面是自己定义了一个注解Animal,Animal含有一个int类型的属性,该属性的名称为value,默认值为5。该注解主要用来注解成员变量,作用于运行期。

    (2)解析注解

    1. public class TestMain {
    2. @Animal(value = 12)
    3. public int age;
    4. public static void main(String[] args) {
    5. TestMain testMain=new TestMain();
    6. Class clazz=testMain.getClass();
    7. try {
    8. Field fieldAge=clazz.getField("age");
    9. Animal animal=fieldAge.getAnnotation(Animal.class);
    10. System.out.println(animal.value()+"===岁===");
    11. } catch (NoSuchFieldException e) {
    12. e.printStackTrace();
    13. }
    14. }
    15. }

    上面通过类的反射机制解析注解,先拿到TestMain类里面的age成员变量,再通过成员变量调用getAnnotation方法拿到该成员变量的注解。

    打印结果:12===岁===

  • 相关阅读:
    el-table中点击跳转到详情页的两种方法
    使用脚本安装mysql
    彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-用户系统EP03
    ST推出 28nm MCU ,NXP更狠,推出16nm MCU
    51单片机控制智能家居监控系统设计仿真
    java(JVM)
    springboot中使用redis管理session
    使用XShell、XFTP 连接 win7 虚拟机(windows、Linux无法远程登录问题)
    9. Spring Boot2.5 实战 – 应用程序性 能监控
    OpenText EnCase 客户案例——哥伦比亚总检察长办公室建立值得信赖的司法警察服务
  • 原文地址:https://blog.csdn.net/cpcpcp123/article/details/127832998