zoukankan      html  css  js  c++  java
  • java annotation

    0 背景

       不同公司一般会使用不同的框架,而其框架中必然会使用到注解和反射。而注解的基础为元注解(修饰注解的注解),此处记录下对元注解的理解(针对jdk1.8)。

    1 元注解包含6个,如java.lang.annotation包下的 Documented、Inherited、Target、Retention、Repeatable及Native,其中 前四个为jdk1.5引入,后两个为jdk1.8引入,Native目前没有使用过,Target和Retention使用较简单,Documented、Inherited及Repeatable的使用存在疑惑,故此处记录一下最新理解,以备后用。

    2 通过官网解释、查询资料及实验,总结如下。

    2.1 Documented 

          被其修饰的非元注解(自定义注解和预定义注解),修饰程序中的元素时,如类、属性等。使用javadoc生成的API包含注解,展示的形式如源码。

    具体如下图所示(以修饰类的注解举例,修饰其他元素的注解类似):

    自定义注解Table

    自定义注解Table的使用

     javadoc生成API过程及结果

    2.2 Inherited

    Table注解被Inherited修饰,故被Table修饰的类可以被其子类继承。(元注解是不能被继承的,可以理解元注解只是解释说明一下自定义注解,元注解和自定义注解修饰的类没有关系。

    官方文档,说Inherited修饰的自定义注解,只有修饰类的时候,启子类才能继承。此处用Inherited修饰注解Field,用Field来修饰User类的属性,看子类SubUser是否能继承。结论,不能继承,和官网结论一致。

     

     

    2.3 Repeatable

    引入该注解之前,下图中的写法是错误的,ide编译通不过,即一个元素只能被同一个注解修饰一次。

     引入Repeatable之后,一个元素可以被同一个注解修饰多次。本质就是,把需要多次使用的注解,封装为一个新注解的属性,且该属性为该类型的数组。

    如下图:Service注解需要在同一元素重复使用,故将其封装为RepeatAnnotation注解的属性,且为Service[] 数组类型,且在Service中引入@Repeatable(RepeatAnnotation.class)

     代码中Repeatable修饰的注解Service的使用

     后续有新的理解,再更新记录。

    备注:本记录只做学习交流使用,不进行盈利性操作。

    参考:

    https://docs.oracle.com/javase/8/docs/api/index.html

    https://www.jianshu.com/p/df22b05d5573

    https://blog.csdn.net/u010979642/article/details/102855171

    https://www.bilibili.com/video/BV19W411R772?from=search&seid=152468195776095893

      

      

  • 相关阅读:
    python基础——dict和set(字典和集合)
    python基础——循环(for,while,break,continue)
    python基础——条件判断
    python基础——list和tuple(列表和元组)
    python基础——字符串、编码、格式化
    Linux 新建线程 简单使用
    Android 原始套接字
    QTextEdit/QPlainTextEdit 等_默认的滚动条_宽度调节
    494. Target Sum
    670. Maximum Swap
  • 原文地址:https://www.cnblogs.com/hblthink/p/13872987.html
Copyright © 2011-2022 走看看