首页 > 代码库 > Annotation注解
Annotation注解
摘要: java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用,因此来说,反射的定义应该包含注解才合理一些。
定义一个注解类
定义一个UserAnnotation注解类
@Target(value = http://www.mamicode.com/{ ElementType.FIELD })""; public int age() default 18; public String gender() default "M"; }
一般来说,源码状态运行和编译状态运行的注解往往和编译器相关,比如报错,警告,类编译参数等,这2类状态一般和编辑器插件关系密切,这里不再讨论
在日常开发中RUNTIME用的最多,这是开发人员可以控制的一个状态。
说明1:Target
【@target】这个注解来指定给哪一类java成员注解,指定注解目标该是什么样的东西
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) //这不是在作弊,这确实是自己注解自己,所以说注解也可以被字节给注解 public @interface Target { ElementType[] value(); //值可以使数组 value=http://www.mamicode.com/{...}>说明2:Retention
@Retention】表示注解运行的状态,换句话说,注解改在什么样的状态下才能运行
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { RetentionPolicy value(); } public enum RetentionPolicy { SOURCE, //源码状态运行, CLASS, //编译类文件时运行 RUNTIME //运行时运行 }使用注解类
其实就是利用反射,看类或方法上是不是有该注解,然后进行相应处理。
public class TestMain { @UserAnnotation(age=20,gender="F",id=2014,name="zhangsan")//注解的使用 private Object obj; public static void main(String[] args) throws Exception { Filed objField = TestMain.class.getField("obj"); UserAnnotation ua = objField.getAnnotation(UserAnnotation.class);//得到注解,起到了标记的作用 System.out.println(ua.age()+","+ua.gender()+","+ua.id()+","+ua.name()); //***进一步操作的话,假设Object要指向一个User类,那么可以讲注解的值给他 TestMain tm = new TestMain(); objFiled.set(tm,new User(ua.age(),ua.gender(),ua.id(),ua.name())); //不错吧,将自己的信息送给obj,起到了附加信息的作用 //-----------请自由遐想吧~~,下面来说说注解怎么能获得注解自己的注解------------- Target t = ua.annotationType().getAnnotation(Target.class) ElementType[] values = t.value(); //~~~~~~~~~~~~~~完了,再一次自由遐想吧~~~~~~~~~~~~~~ Sysout.out.println("注意:是遐想,不是瞎想!!"); } }总结
注解自java 1.5引入以来,就被不断应用,目前各大框架基本都支持并开发了自己的注解,它的实用性让它使用广泛,因此掌握它很有必要。
参考资料
- 援引:java 注解的基本原理和编程实现
Annotation注解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。