博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中定义注解
阅读量:3935 次
发布时间:2019-05-23

本文共 1532 字,大约阅读时间需要 5 分钟。

 

创建

@Target({ElementType.Type})@Retention(RetentionPolicy.RUNTIME)public @interface Fruit {    String value() default "";    String name() default "noname";    float price() default 0;}// 1. 创建的语法跟接口非常像// 2. 可以通过 default 语句给与默认值

@Target

目标。

表示这个注解可以放到哪些元素上面。如果不设定,那么注解可以放置到任何元素上。

可以有很多选项,比如:

  • ElementType.TYPE,可以放到类、接口、枚举类上面
  • ElementType.METHOD,可以放到方法上面
  • ElementType.PARAMETER,可以放到参数上面

更多,请查看 ElementType 的源码。

@Retention保留。有三种策略:RetentionPolicy.SOURCERetentionPolicy.CLASS [默认]RetentionPolicy.RUNTIME添加的注解会被保留到什么步骤。一个 Xxx.java 从产生到执行,会经历这样的步骤Xxx.java --javac--> Xxx.class --java--> 机器码执行

  执行 javac 的过程,叫编译时(Compile);

  执行 java 的过程,叫运行时(Runtime);

  如果 @Retention 策略设置为:

  • SOURCE,那么在 javac 阶段注解会有效,编译之后注解将会被抛弃
  • CLASS,那么注解将会被编译到 class 文件中,但它不能在运行时通过反射获取
  • RUNTIME,那么注解将会被编译到 class 文件中,并能在运行时通过反射获取

   @Documented

  表示是否允许 javadoc 或相关工具为这个注解生成文档

   @Inherited

  表示注解是否可以被子类继承。

 注解的使用

首先,在需要的地方,添加注解:

@Fruit(name = "apple", price = 33)public class Apple {    // ...}

  三个重要的方法:

  • isAnnotationPresent()
  • getAnnotation()
  • getAnnotations()

使用示例:

// 获取 Apple 的类对象Class aClass = Apple.class;if (aClass.isAnnotationPresent(Fruit.class)) {      // 判断 Apple 上面是否标注了 Fruit 注解    Fruit anno = aClass.getAnnotation(Fruit.class); // 通过反射的方式,获取 Apple 上面的 Fruit 注解的实例    String name = anno.name(); // 可以像调用普通方法一样调用,从而获取参数    float price = anno.price();    System.out.println(name + "的价格为" + price);}

  JDK 内置注解

  • @Override, 重载
  • @SuppressWarnings, 抑制警告信息
  • @Deprecated, 标注方法已过时,那么在编译的时候,编译器会发出相关警告
  • @SafeVarargs
  • @FunctionInterface
 
 
 
 
 
 
 
posted @ 2018-11-24 00:01 阅读(...) 评论(...)

转载地址:http://tthgn.baihongyu.com/

你可能感兴趣的文章
学术英语 | (6) WordList6
查看>>
线性代数 | (5) 线性方程组
查看>>
学术英文 | (7) Unit3Words
查看>>
线性代数 | (6) 相似对角形
查看>>
学术英语 | (8) WordList7
查看>>
概率论与数理统计 | (1) 概率论初步Part One
查看>>
概率论与数理统计 | (2) 概率论初步Part Two
查看>>
概率论与数理统计 | (3) 随机变量
查看>>
学术英语 | (9) WordList8
查看>>
概率论与数理统计 | (4) 二元随机变量Part One
查看>>
学术英语 | (10) WordList9
查看>>
李航机器学习 | (2) 统计学习方法(第2版)笔记 --- 感知机
查看>>
动手学PyTorch | (33) 通过时间反向传播
查看>>
动手学PyTorch | (37) 优化与深度学习
查看>>
动手学PyTorch | (39) 小批量随机梯度下降
查看>>
动手学PyTorch | (59) 微调(fine-tuning)
查看>>
LaTex论文排版 | (20) LaTex首行缩进
查看>>
LaTex论文排版 | (21) 图表caption居中显示
查看>>
深度学习 | (4) 分类问题的Label为啥是one-hot?
查看>>
LaTex论文排版 | (22) argmax、argmin下标使用方法及任意、存在符号
查看>>