Java 预定义注解

Java 支持一组预先定义好的注解。下面介绍了Java Core 中提供的注解

  • @Retention: 该注解用来修饰其他注解,并标明被修饰注解的作用域。其 value 的属性值包含3种:

    • SOURCE: 注解仅在源代码中可用。编译器和 JVM 会忽略此注解,因此在运行时不可用;
    • CLASS: 编译器会处理该注解,但 JVM 不会处理,因此在运行时不可用;
    • RUNTIME: JVM 会处理该注解,可以在运行时使用。
  • @Target: 该注解标记可以应用的目标元素:
    • ANNOTATION_TYPE: 可修饰其他注解;
    • CONSTRUCTOR: 可以修饰构造函数;
    • FIELD: 可以修饰字段或属性;
    • LOCAL_VARIABLE: 可以修饰局部变量;
    • METHOD: 可以修饰 method;
    • PACKAGE: 可以修饰 package 声明;
    • PARAMETER: 可以修饰方法参数;
    • TYPE: 可以修饰 Class、Interface、Annotation 或 enum 声明;
    • PACKAGE: 可以修饰 package 声明;
    • TYPE_PARAMETER: 可以修饰参数声明;
    • TYPE_USE: 可以修饰任何类型。
  • @Documented: 该注解可以修饰其他注解,表示将使用 Javadoc 记录被注解的元素。
  • @Inherited: 默认情况下,注解不会被子类继承。但是,如果把注解标记为 @Inherited,那么使用注解修饰 class 时,子类也会继承该注解。该注解仅适用于 class。注意:使用该注解修饰接口时,实现类不会继承该注解。即: @Inherited继承只能发生在类上,而不能发生在接口上(也就是说标注在接口上仍然是不能被继承的) 当@InheritedAnno注解加在某个类A上时,假如类B继承了A,则B也会带上该注解。
  • @Deprecated: 标明不应该使用带此注解的元素。使用这个注解,编译器会对应生成告警。该注解可以应用于 method、class 和字段。
  • @SuppressWarnings: 告诉编译器由于特定原因不产生告警。
  • @Override: 该注解通知编译器,该元素正在覆盖(Override)父类中的元素。覆盖元素时,不强制要求加上该注解。但是当覆盖没有正确完成时,例如子类方法的参数与父类参数不同或者返回类型不匹配时,可以帮助编译器生成错误。
  • @SafeVarargs: 该注解断言(Assert)方法或构造函数代码不会对其参数执行不安全(Unsafe)操作。
  • @Repeatable: 该注解表示可以对同一个元素多次使用相同的注解

Repeatable 实战

定义一个可重复修饰 class 的注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(RepeatableAnnotation.class)
public @interface MyAnnotation {String value();String name();
}

RepeatableAnnotation可以重复修饰元素

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RepeatableAnnotation {MyAnnotation[] value();
}
@MyAnnotation(value = "Jaemon", name = "J.M")
@MyAnnotation(value = "Answer", name = "L.A")
public class AnswerApp {public static void main(String[] args) {for (Annotation annotation : AnswerApp.class.getAnnotations()) {System.out.println(annotation.toString());}System.out.println();RepeatableAnnotation annotation = AnswerApp.class.getAnnotation(RepeatableAnnotation.class);for (MyAnnotation myAnnotation : annotation.value()) {System.out.println(myAnnotation.value());System.out.println(myAnnotation.name());}}}
@com.answer.ai.anno.RepeatableAnnotation(value=[@com.answer.ai.anno.MyAnnotation(value=Jaemon, name=J.M), @com.answer.ai.anno.MyAnnotation(value=Answer, name=L.A)])Jaemon
J.M
Answer
L.A

参考网址

  • Java 8 注解探秘

java注解(Annotation)-Repeatable实战相关推荐

  1. java 注解: Annotation

    java 注解: Annotation 普通注解 自定义注解 元注解 注解: 位于源码中,用来修饰程序的元素,但不会对被修饰的对象有直接的影响. 可增加程序的动态性. 普通注解 普通注解:为java代 ...

  2. Java注解(Annotation)详解

    转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...

  3. Java注解Annotation 完成验证

    Java注解Annotation用起来很方便,也越来越流行,由于其简单.简练且易于使用等特点,很多开发工具都提供了注解功能,不好的地方就是代码入侵比较严重,所以使用的时候要有一定的选择性. 这篇文章将 ...

  4. java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制.Java 语言中的类.方法.变量.参数和包等都可以被标注.注解可以看作是一种特殊的标记,在程序在编译或 ...

  5. Java注解annotation invalid type of annotation member

    文章目录 Java注解annotation : invalid type of annotation member 1.什么是invalid type of annotation member 2.哪 ...

  6. Java 注解(Annotation)使用方法归纳

    Java注解Annotation使用方法归纳 简介 注解是从JDK5开始支持,是Java对元数据的一种特殊支持.与注释有一定区别,可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等 ...

  7. Java注解Annotation的用法 - 自定义Annotation实现

    Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...

  8. 深入理解Java注解Annotation之注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  9. 深入理解Java注解Annotation及自定义注解

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

最新文章

  1. 当CPU飙高时,它在做什么
  2. memcpy-结构体的复制
  3. 在Nginx上配置多个站点
  4. python中bin是什么意思_Python之一、#!/usr/bin/python到底是什么意思
  5. 图解使用CygWin进行Linux操作和编程
  6. x722网卡支持百兆吗_同样是无线网卡,为什么要选千兆的?
  7. pandas.read_csv参数详解
  8. RabbitMQ的5种队列_Work模式_入门试炼_第5篇
  9. 微信、企业微信和支付窗 SDK 三合一,JeeWx-api 1.2.0 版本发布
  10. 就9.5面试做个小结
  11. Linux环境下编程有哪些优势?
  12. Cinesamples CineOrch for Mac(电影管弦乐队音色库)v2.0特别版
  13. 矩阵分解-Cholesky分解
  14. springboot呼伦贝尔旅游网站的设计与实现毕业设计源码091833
  15. 东瓜小知识之《简单查询网卡的厂商信息》
  16. Appium+Python MAC安装Android夜神模拟器(二)
  17. 数字微镜器件(DMD)呈现不同灰度(强度)原理的验证实验
  18. SQL中AND和OR同时使用的注意事项
  19. 北师大版图形的旋转二教案_北师大版数学六年级下册《图形的旋转(二)》教案疲惫不堪的意思...
  20. 假如你收到了一封来自Twoo的邮件...

热门文章

  1. strerror函数的使用
  2. LS1046A SGMII网口无PHY芯片的配置
  3. tr标签单独添加border
  4. 全连接神经网络——MINST手写数字识别
  5. elementui 和vantUi表单validate区别
  6. CTF-CRYPTO-RSA Polynomial
  7. html5常用英文单词,英语中最常用的50个单词(上)
  8. 解决div里面img图片下方有空白的问题
  9. 福布斯系列之数据采集 | Python数据分析项目实战
  10. BurntSushi/toml