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

本文共 1545 字,大约阅读时间需要 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

转载于:https://www.cnblogs.com/nongzihong/p/10010334.html

你可能感兴趣的文章
我的友情链接
查看>>
OC之self详解
查看>>
nginx ssl配置步骤
查看>>
Unity3d热更新(四):压缩文件
查看>>
sysctl.conf文件详解
查看>>
在连接中的EOF意味着什么?
查看>>
我的友情链接
查看>>
获得指定日期【月初和月末】
查看>>
Angular动画
查看>>
谈谈redis,memcache的区别和具体应用场景
查看>>
redis安装开发使用
查看>>
Java注解技术
查看>>
ArangoDB 3.2 Beta 版本发布,3项新特性为独家所有!
查看>>
java读取xml文件字段值
查看>>
5-3 8 shell介绍 命令历史 补全 别名 通配符 重定向
查看>>
分布式应用的各基本领域及开发技术概要
查看>>
python文件管理
查看>>
Flex布局兼容知识点总结
查看>>
Truffle 3.0部署智能合约至Ethereum节点
查看>>
Hadoop-HBase安装和配置
查看>>