文章目录

  • 一、@Target
  • 二、@Documented 注释
  • 三、@Inherited 注释

一、@Target

如果一个Annotation 没有明确地指明定义的位置,则可以在任意的位置使用,例如之
前所讲解的全部的 Annotation 因为没有指定应用位置,所以可以在任意位置上进行定义。

@MyDefaultAnnotationReflect (key = "J1", value = "J2")
public class SimpleBean {//使用自定义的Annotation并设置两个属性内容@MyDefaultAnnotationReflect (key = "J3", value = "J4")public String toString() {//覆写toString()方法return "Hello World" ;}
}

以上定义的 MyDefaultAnnotationReflect 可以在方法上声明,也可以在类上声明;
而如果希望一个自定义的Annotation 只能在指定的位置上出现,例如,只能在类上或只能在方法中声明,则必须使用@Target注释。

@Target 明确地指出了一个Annotation的使用位置,此注释的定义如下:
@Documented
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.ANNOTATION_TYPE)
public @interface Target {public abstract ElementType[] value
}


下面定义一个 Annotation,此 Annotation 只能用在类上,不能用在方法中:


定义一个 Annotation 可以出现在类、方法上:

@Target({ElementType.TYPE,ElementType.METHOD}) //此 Annotation 只能用在类上及方法上
@Retention(value = RetentionPolicy.RUNTIME)//此 Annotation 在类执行时依然有效
@interface MyTargetAnnotation{public String key() default "J1";public String value() default "J2";
}

二、@Documented 注释

任何一个自定义的 Annotation 实际上都是通过 @Documented 进行注释的,在生成
javadoc 时可以通过 @Documented 将一些文档的说明信息写入。@Documented 的使用格式:

@Documented
[public] @interface Annotation名称{数据类型 变量名称();
}

使用完整格式定义 Annotation:

@Documented
@interface MyDocumentedAnnotation{public String key();public String value();
}

使用 @Documented 注释后,此 Annotation 在生成 java doc 时就可以加入类或方法的一些说明信息,这样可以便于用户了解类或方法的作用

对定义的方法进行 javadoc 注释:

@MyDocumentedAnnotation(key="J1",value="J2")
public class SimpleBeanDocumented{//此方法在对象输出时调用,返回对象的信息@MyDocumentedAnnotation(key="J3",value="J4")public String toString(){return "Hello World !!!";}
}

在命令行中执行:

javadoc -d doc SimpleBeanDocumented.java



打开 index.html 可以查看之前编写好的 java doc

三、@Inherited 注释

@Inherited 用于标注一个父类的注释是否可以被子类所继承,如果一个 Annotation 需要被其子类所继承,则在声明时直接使用 @Inherited 注释即可

Inherited 的 Annotation 定义如下:

@Documented
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.ANNOTATION_TYPE)
public @interface Inherited{}

定义一个 Annotation,观察 Inherited 的作用:

import java.lang.annotation.*;@Documented
@Inherited//此 Annotation 可以被继承
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyInheritedAnnotation{public String name();
}//定义 Person 类
@MyInheritedAnnotation(name = "Java")
class Person{}class Student extends Person{//继承 Person类
}public class Test{public static void main(String[] args) throws Exception {Class<?> c = null;c = Class.forName("Student");Annotation ann[] = c.getAnnotations();for (Annotation a:ann){//输出全部的 AnnotationSystem.out.println(a);}if (c.isAnnotationPresent(MyInheritedAnnotation.class)){MyInheritedAnnotation mda = null;//声明自定义的 Annotation
//            取得自定义的 Annotation,此 Annotation是从父类继承而来mda = c.getAnnotation(MyInheritedAnnotation.class);String name = mda.name();//得到自定义的 Annotation 指定变量内容System.out.println("name = " + name);}}
}


这里如果在声明 Annotation 时,没有加上 @Inherited 注释,则此 Annotation 是无法被继承的

一篇文章带你搞定 Java 中 @Target、@Documented 和 @Inherited 注释相关推荐

  1. 一篇文章带你搞定 Ubuntu 中打开 Pycharm 总是卡顿崩溃

    由于 Ubuntu 中的汉字输入实在是太不友好了,所以装了个 搜狗输入法,好不容易把 搜狗输入法装好,本以为可以开开心心的搞代码了,然而... pycharm 一打开,就崩溃,关不掉,进程杀死还是不行 ...

  2. 一篇文章带你搞定 Java 日志框架 slf4j

    文章目录 一.门面模式 二.为什么要使用 slf4j ? 三.如何使用 一.门面模式 slf4j是门面模式的典型应用,因此在讲slf4j前,先简单学习下门面模式, 门面模式,其核心为外部与一个子系统的 ...

  3. 一篇文章带你搞定 MongoDB 中的索引(创建/查看/删除)

    索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索引,NoSQL 中当然也有,本文我们就先来简单介绍下 MongoDB 中的索引. 文章目录 一.索引创建 二.查看索引 三.删 ...

  4. 一篇文章带你搞定 MongoDB 中 MapReduce 使用

    玩过 Hadoop 的小伙伴对 MapReduce 应该不陌生,MapReduce 的强大且灵活,它可以将一个大问题分解为多个小问题,将各个小问题发送到不同的机器上去处理,所有的机器都完成计算后,再将 ...

  5. 一篇文章带你搞定 Pygame 中 RECT类(get_rect中的 left,right,top,bottom)解释

    先附上示例: import pygame import sys pygame.init() size = width,height = 600,400 bg = (255,255,255) scree ...

  6. java 不重启部署_一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

    一.通过配置文件控制静态资源的热部署 在配置文件 application.properties 中添加: #表示从这个默认不触发重启的目录中除去static目录 spring.devtools.res ...

  7. 一篇文章帮你搞定JVM中的堆

    文章目录 一篇文章帮你搞定JVM中的堆 堆的核心概述 堆的内存细分 设置堆内存大小与OOM OOM(OutOfMemory)举例 年轻代与老年代 图解对象分配过程 MinorGC,MajorGC,Fu ...

  8. 一篇文章带你搞定19年数学建模机场出租车优化问题示例讲解含代码

    文章目录 一.问题分析 二.数据介绍 三.模型的求解 四.结果分析 一.问题分析 收集国内某一机场及其所在城市出租车的相关数据,给出该机场出租车司机的选择方案,并分析模型的合理性和对相关因素的依赖性. ...

  9. 一篇文章带你搞定 MongoDB 实现 REST

    文章目录 一.前期准备 二.SpringBoot 实现 MongoDB 的 REST 三.使用 Postman 测试使用 一.前期准备 首先使用 docker 搭建好 MongoDB:一篇文章带你搞定 ...

最新文章

  1. C++中访问类的私有数据成员的第三种方法
  2. git——从远程库克隆
  3. Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)
  4. linux服务器密码策略,windows与linux服务器平台密码策略管理
  5. python自学书籍顺序-2018最全各阶段Python学习书籍汇总!
  6. php curl 测试,php使用curl检测网页是否被百度收录的示例
  7. 【数据结构与算法】之深入解析“最接近的三数之和”的求解思路与算法示例
  8. C# XML反序列化与序列化举例:XmlSerializer(转)
  9. 前端面试题之http/HTML/浏览器(一)
  10. Hibernate 添加数据 一 (一对多)
  11. 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求的架构细节【转】
  12. WLAN配置实例(一)——二层组网直接转发
  13. 为什么我们需要研究迁移学习?
  14. html期末作业代码网页设计 我的家乡网站设计——我的家乡-四川成都(4页) HTML+CSS+JavaScript
  15. 中望3d快捷键命令大全_室内设计3D快捷键 CAD命令
  16. python爬虫构建国外代理池_建立爬虫代理ip池
  17. 互联网日报 | 6月8日 星期二 | 华为30亿成立数字能源公司;阿里明星直播业务“天猫星选”上线;苹果WWDC 2021开幕...
  18. git commit最佳实践:conventional commits
  19. 数据分析项目实战——Airbnb数据分析
  20. 第四次作业—四则运算

热门文章

  1. 什么是线程死锁?如何避免死锁?
  2. 计算机主机不通电,电脑主机
  3. 快速导出相片#腾讯QQ
  4. ar71xx php-fpm,【U-Boot】不死 U-Boot AR71XX 全系列 + AR2317
  5. 通讯录(cmd命令行版)-Java
  6. 高三毕业生如何自学软件工程_经过四个月的自学,我如何获得软件工程实习生...
  7. Word控件Spire.Doc 【段落处理】教程(十七):在 C#、VB.NET 中的 Word 中按样式名称获取段落
  8. 申请实用新型专利有什么优势
  9. SpringMVC框架学习总结
  10. 15个常用excel函数公式_excel函数公式:常用高频公式应用总结(上)