注解学习

注解学习

Posted by 晓晨DEV on August 3, 2016

什么是注解?

注解就是相当于把我们写的数据存储起来,之后在某个时间(编译时或者运行时)去调用它。

注解是怎么被解释的?

RetentionPolicy.SOURCE 只在源码有效,用于便于阅读理解。

RetentionPolicy.CLASS 编译生效注解,自定义时候需要注意使用Java Library ,因为你使用Android Library 的时候很多javax里的是不能使用的。 自定义方法:

  • 创建一个注解类
  • java library中创建一个类继承自AbstractProcessor
  • java library工程的src/main目录上创建resources文件夹
  • resources文件夹中创建META-INF包,在META-INF包中创建services
  • services包下创建javax.annotation.processing.Processor文件
  • javax.annotation.processing.Processor文件中写下你继承自AbstractProcessor类的那个子类的全完整路径(com.example.MyProcessor)
  • 在编译的时候会执行 MyProcessorprocess 方法

RetentionPolicy.RUNTIME 运行时注解,通过反射调用,自定义方法:

参考Java自定义注解和运行时靠反射获取注解

例子学习

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
@Inherited
public @interface From {
    int value() default 1;
    boolean canBeNull() default false;
}

如上例子是声明一个注解:

  • @Retention 有3个值(源码期间有效 RetentionPolicy.SOURCE,编译有效RetentionPolicy.CLASS,运行有效RetentionPolicy.RUNTIME
  • @Target 说明注解使用的地方
  • @Documented 使用了@Documented的可以在javadoc中找到
  • @Interited 可继承性的标识,使用了Interited表示注解里的内容可以被子类继承,比如父类中某个成员使用了上述@From(value),From中的value能给子类使用到

参考文档:


分享