关于java的注解

Java 2017-12-28

前言

从 jdk5开始,Java增加了对元数据的支持,也就是Annotation,Annotation其实就是对代码的一种特殊标记,这些标记可以在编译,类加载和运行时被读取,并执行相应的处理。当然刚刚说了,Annotation只是一种标记,所以要是在代码里面不用这些标记也是能完成相应的工作的,只是有时候用注解能简化很多代码,看起来非常的简洁。

## 基本的Annotation

@Override——限定重写父类方法

@Deprecated——标示已过时

@SuppressWarning——抑制编译器警告

@SafeVarargs——这货与Java7里面的堆污染有关,具体想了解的,传送到这里

JDK的元Annotation

JDK除了提供上述的几种基本的Annotation外,还提供了几种Annotation,用于修饰其他的Annotation定义

@Retention 这个是决定你Annotation存活的时间的,它包含一个RetationPolicy的value成员变量,用于指定它所修饰的Annotation保留时间,一般有:

Retationpolicy.CLASS:编译器将把Annotation记录在Class文件中,不过当java程序执行的时候,JVM将抛弃它。

Retationpolicy.SOURCE : Annotation只保留在原代码中,当编译器编译的时候就会抛弃它。

Retationpolicy.RUNTIME : 在Retationpolicy.CLASS的基础上,JVM执行的时候也不会抛弃它,所以我们一般在程序中可以通过反射来获得这个注解,然后进行处理。

@Target 这个注解一般用来指定被修饰的Annotation修饰哪些元素,这个注解也包含一个value变量:

ElementType.ANNOTATION_TYPE : 指定该Annotation只能修饰Annotation。

ElementType.CONSTRUCTOR: 指定只能修饰构造器。

ElementType.FIELD: 指定只能成员变量。

ElementType.LOCAL_VARIABLE: 指定只能修饰局部变量。

ElementType.METHOD: 指定只能修饰方法。

ElementType.PACKAGE: 指定只能修饰包定义。

ElementType.PARAMETER: 指定只能修饰参数。

ElementType.TYPE: 指定可以修饰类,接口,枚举定义。

@Document 这个注解修饰的Annotation类可以被javadoc工具提取成文档

@Inherited 被他修饰的Annotation具有继承性

自定义Annotation

上面讲了一些jdk自带的Annotation,那么我们现在就可以用这些jdk自带的Annotation来实现一些我们想要的功能。由于最近在看butterknife的源码,那么我们就一步一步地模仿butterknife的实现吧。

作者:尸情化异
链接:https://www.jianshu.com/p/ca7f22b4b751
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


本文由 方方無 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

shijiebei 365bet manbetx 188bet xinshui caipiao 95zz tongbaoyule beplay 88bifa 18luck betway bwin hg0088 aomenjinshayulecheng ca88 shenbotaiyangcheng vwin w88 weide