本文共 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 语句给与默认值
目标。
表示这个注解可以放到哪些元素上面。如果不设定,那么注解可以放置到任何元素上。
可以有很多选项,比如:
更多,请查看 ElementType 的源码。
@Retention保留。有三种策略:RetentionPolicy.SOURCERetentionPolicy.CLASS [默认]RetentionPolicy.RUNTIME添加的注解会被保留到什么步骤。一个 Xxx.java 从产生到执行,会经历这样的步骤Xxx.java --javac--> Xxx.class --java--> 机器码执行
执行 javac 的过程,叫编译时(Compile);
执行 java 的过程,叫运行时(Runtime);
如果 @Retention 策略设置为:
表示是否允许 javadoc 或相关工具为这个注解生成文档
表示注解是否可以被子类继承。
首先,在需要的地方,添加注解:
@Fruit(name = "apple", price = 33)public class Apple { // ...}
三个重要的方法:
使用示例:
// 获取 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);}
转载地址:http://tthgn.baihongyu.com/