对于注解,相信你们都不陌生了,可是这种熟悉对于Android开发者来讲,也就是仅仅是它认识你,你不认识它吧,由于,咱们几乎都停留在用上了。像dagger2,像retrofit,像greenDao,他们都是满满的使用了注解,而咱们只是停留在知其然缺不知其因此然的层面,那么我本次分享讲分红几批博客共享给你们一个体系的又不失针对Android平台须要的恰到好处的给你们整理真正须要掌握的知识体系。面试
Java 注解用于为 Java 代码提供元数据。做为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上能够用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。数组
若是把代码想象成一个具备生命的个体,注解就是给这些代码的某些个体打标签bash
public @interface Test {
}复制代码
它的形式跟接口很相似,不过前面多了一个 @ 符号。上面的代码就建立了一个名字为 Test 的注解。微信
你能够简单理解为建立了一张名字为 Test的标签。markdown
@Test
public class TestAnnotation {
}复制代码
建立一个类 TestAnnotation,而后在类定义的地方加上 @Test就能够用 Test注解这个类了架构
你能够简单理解为将 Test 这张标签贴到 TestAnnotation这个类上面。工具
元注解是能够注解到注解上的注解,或者说元注解是一种基本注解,可是它可以应用到其它的注解上面。spa
若是难于理解的话,你能够这样理解。元注解也是一张标签,可是它是一张特殊的标签,它的做用和目的就是给其余普通的标签进行解释说明的。code
元标签有 @Retention、@Documented、@Target、@Inherited、@Repeatable 5 种。orm
注解的属性也叫作成员变量。注解只有成员变量,没有方法。
须要注意的是,在注解中定义属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组
注解中属性能够有默认值,默认值须要用 default 关键值指定
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Test{ int id() default -1; String msg() default "Hello"; }复制代码
上面代码定义了 TestAnnotation 这个注解中拥有 id 和 msg 两个属性。在使用的时候,咱们应该给它们进行赋值。
赋值的方式是在注解的括号内以 value="" 形式,多个属性以前用 ,隔开
@Test(id=1,msg="hello annotation") public class TestAnnotation { }复制代码
注解与反射。
注解经过反射获取。首先能够经过 Class 对象的 isAnnotationPresent() 方法判断它是否应用了某个注解
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {}复制代码
而后经过 getAnnotation() 方法来获取 Annotation 对象。
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {复制代码
或者是 getAnnotations() 方法。
public Annotation[] getAnnotations() {}复制代码
前一种方法返回指定类型的注解,后一种方法返回注解到这个元素上的全部注解。
若是获取到的 Annotation 若是不为 null,则就能够调用它们的属性方法了。好比
@Test() public class TestDemo{ public static void main(String[] args) { boolean hasAnnotation = TestDemo.class.isAnnotationPresent(Test.class); if ( hasAnnotation ) { TestAnnotation testAnnotation = TestDemo.class.getAnnotation(Test.class); System.out.println("id:"+testAnnotation.id()); System.out.println("msg:"+testAnnotation.msg()); } } }复制代码
读到这的朋友以为不错能够点赞关注下,感谢您的支持,之后会不停更新更多精选干货及资讯分享,欢迎你们在评论区留言讨论!
欢迎关注享学课堂online微信公众号,天天会持续更新技术干货,热点,吐槽等文章,还有免费的Android架构视频资料和面试专题资料免费领取分享,后台回复关键字【Android资料】,免费获取Android架构面试专题文档资料、电子书及更多架构进阶视频资料(视频+笔记)