Java常用注解笔记

版权声明: https://blog.csdn.net/u010577768/article/details/86707486

常用注解笔记

1、@Target

####用于描述注解的使用范围
####取值范围(ElementType):
1)CONSTRUCTOR:用于描述构造器
2)FIELD:用于描述域
3)LOCAL_VARIABLE:用于描述局部变量
4)METHOD:用于描述方法
5)PACKAGE:用于描述包
6)PARAMETER:用于描述参数
7)TYPE:用于描述类、接口(包括注解类型) 或enum声明

2、@Retention(保留)

####描述该注解会被保留到那个阶段
####取值范围 (RetentionPolicy)
1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略
2.RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略
3.RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留 ,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用

3、@Inherited

表示被注解的类会自动继承;

1)定义的注解使用了@Inherited 标记;
2)用该注解标注了一个父类,则该父类的所有属性将被继承到它的子类中;

4、@SupportedAnnotationTypes({com.xxx.Route, com.xxx.Autowired})

指定要解析的注解类型

5、@SupportedSourceVersion(SourceVersion.RELEASE_7)

指定JDK版本

6、@SupportedOptions({KEY_MODULE_NAME, KEY_GENERATE_DOC_NAME})


Map

在 build.gradle 中配置

  
android {
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
}

通过在 build.gradle 编译配置(javaCompileOptions)中配置注解处理配置(annotationProcessorOptions),这样在注解处理器中
加上@SupportedOptions({…})就能拿到该配置,上面demo中配置的值是project.getName(),拿到的就是module的名字。

7、@AutoService(Processor.class)

AutoService会自动在META-INF文件夹下生成Processor配置信息文件,该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,
就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。
基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定,方便快捷。
java/main/META-INF/services/javax.annotation.processing.Processor

8、@IntDef

作用:限定一个特定的整数变量

@IntDef({Mode.ONE, Mode.MOBILE})
@Retention(RetentionPolicy.SOURCE)
public @interface Mode {
	int ONE = 1;
	int MOBILE = R.drawable.ic_mobile;
}

9、@CallSpuer

作用:要求子类调用该方法的super

猜你喜欢

转载自blog.csdn.net/u010577768/article/details/86707486