分类
- 标准注解
@override,@SupressWarning这类java自带注解,编译器识别,不会进行编译,也不会编译到.class文件 - 元注解
@Retention, @Target, @Inherited, @Documented,它们是用来定义 Annotation 的 Annotation。
@Retention - 标识这个注解怎么保存,是只在源码中,还是编在class文件中,或者是在运行时可以通过反射访问。
@Retention(RetentionPolicy.SOURCE)
源码时注解,一般用来作为编译器标记。如Override, Deprecated, SuppressWarnings。
@Retention(RetentionPolicy.RUNTIME)
运行时注解,在运行时通过反射去识别的注解。
@Retention(RetentionPolicy.CLASS)
编译时注解,在编译时被识别并处理的注解,这是本章重点。 - 自定义注解
注解声明
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface ContentView {
int value();
}
//注解使用
@ContentView(R.layout.activity_home)
public class HomeActivity extends BaseActivity {
。。。
}
//注解解析
for (Class c = this.getClass(); c != Context.class; c = c.getSuperclass()) {
ContentView annotation = (ContentView) c.getAnnotation(ContentView.class);
if (annotation != null) {
try {
this.setContentView(annotation.value());
} catch (RuntimeException e) {
e.printStackTrace();
}
return;
}