• Java 注解


    注解有以下几个作用:

    1. 编写文档

    2. 代码分析

    3. 编译检查

    内置注解

    java中常用的内置注解有:

    1. @Override 重写方法

    2. @Deprecated 标注内容已过时

    3. @SuppressWarnings("all") 压制所有警告⚠

    自定义注解

    注解继承自Annotation接口

    创建指定以注解格式如下:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AnnoTest {
        String name();
    }
    

    注解需要以方法的形式定义自己的成员属性。使用时需要对成员进行赋值。

    例如

    @AnnoTest(name = "bob")
    class Test{}
    

    同时对方法的返回值也有要求,返回值类型只能够时以下几种:

    1. 基本类型
    2. String
    3. 枚举
    4. 注解
    5. 以上类型的数组

    注解中被声明了的实例成员在使用注解时必须提供值,除非使用如下格式定义了初始值

    public @interface AnnoTest{
        String name();
        int age() default 18;
    }
    

    此时,age将不是必须的,默认为18.

    数组赋值时,需要使用{}来包裹,如果数组中只有一个指,则{}可以省略

    元注解

    常见元注解以以下几个

    Target

    @Target 描述注解能够作用的位置,需要一个枚举值参数列表

    ElementType枚举取值:

    1. TYPE 作用于类
    2. METHOD 作用于方法
    3. FIELD 作用于成员变量

    Retention

    @Retention 描述注解能够被保留到何时,需要枚举值参数

    RetentionPolicy.RUNTIME 当前被描述的注解会保留到字节码文件中,并被JVM读到

    大多数时候都期望注解保留到这个阶段

    Documented

    @Documented 注解是否被抽取到文档中

    Inherited

    @Inherited 类中的注解是否能被其他类继承

    解析注解

    解析注解有如下一个步骤:

    1. 获取该类的字节码对象
    2. 使用getAnnotation
    3. 调用注解的方法
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AnnoTest {
        String name();
    }
    
    @AnnoTest(name = "xiaoxiao")
    public class Test {
        public static void main(String[] args) throws NoSuchFieldException {
            Class<AnnoTest> annoClass = AnnoTest.class;
            Class<Test> testClass = Test.class;
            AnnoTest annotation = testClass.getAnnotation(annoClass);
            System.out.println(annotation.name());
        }
    }
    
  • 相关阅读:
    一种通用的简易缓存设计方案
    SpringCloud接入Passport中台服务的FeignClient简易集成配置
    一种基于P2P技术的高效数据传输方式
    应用多环境部署和Redis高可用
    瑞金小吃
    前(单页面)后端完全分离的OAuth2授权和分享
    Session(数据)共享的前后端分离Shiro实战
    10万Http(单机和集群Server)Subscribe的可行性实验和压测
    2018年你应该了解的前端新技术
    js常见问题总结归纳
  • 原文地址:https://www.cnblogs.com/freesfu/p/13817317.html
Copyright © 2020-2023  润新知