android 注解

1:刚刚新版本号的公布,抽出时间写下关于注解在android 开发中的使用

  在java中注解的相关的解释:

   元注解:

        元注解的作用就是负责注解其它注解,Java5.0 定义了4个标准的 meta-annotation 类型,他们被用来听对其它 annotation 类型作说明,

     

      @Tatget

       说明了Annotation 所修饰的对象范围 :Annotation 可被用于 packages types ( 类 接口 枚举 Annotation 类型) 类型成员 (方法 构造方法 成员变量 枚举值 ) 方法參数 和本地变量 (循环变量 catch 參数) 在Annotation 类型的声明中使用了target 可更加明晰其修饰的目标

取值(ElementType)有:

    1.CONSTRUCTOR:用于描写叙述构造器
    2.FIELD:用于描写叙述域
    3.LOCAL_VARIABLE:用于描写叙述局部变量
    4.METHOD:用于描写叙述方法
    5.PACKAGE:用于描写叙述包
    6.PARAMETER:用于描写叙述參数
    7.TYPE:用于描写叙述类、接口(包含注解类型) 或enum声明

@RetentionPoicy 

    定义改Annoation 被保留的时间长短,某些Annotation 仅出如今源码中,而被编译器丢弃,而还有一些却被编译在class 文件里。编译在class文件里的Annotation 可能会被nijihulue 

 1.SOURCE:在源文件里有效(即源文件保留)
    2.CLASS:在class文件里有效(即class保留)
    3.RUNTIME:在执行时有效(即执行时保留)

  Retention meta-annotation类型有唯一的value作为成员。它的取值来自java.lang.annotation.RetentionPolicy的枚举类型值

@Documented:

  @Documented用于描写叙述其他类型的annotation应该被作为被标注的程序成员的公共API。因此能够被比如javadoc此类的工具文档化。Documented是一个标记注解。没有成员。


@Inherited:

  @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。假设一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

  注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。

  当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这样的继承性。假设我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层

自己定义注解:

  使用@interface自己定义注解时,自己主动继承了java.lang.annotation.Annotation接口,由编译程序自己主动完毕其它细节。

在定义注解时。不能继承其它的注解或接口。@interface用来声明一个注解。当中的每个方法实际上是声明了一个配置參数。

方法的名称就是參数的名称,返回值类型就是參数的类型(返回值类型仅仅能是基本类型、Class、String、enum)。能够通过default来声明參数的默认值。

  定义注解格式:
  public @interface 注解名 {定义体}

  注解參数的可支持数据类型:

    1.全部基本数据类型(int,float,boolean,byte,double,char,long,short)
    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上全部类型的数组

  Annotation类型里面的參数该怎么设定: 
  第一,仅仅能用public或默认(default)这两个訪问权修饰.比如,String value();这里把方法设为defaul默认类型;   
  第二,參数成员仅仅能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.比如,String value();这里的參数成员就为String;  
  第三,假设仅仅有一个參数成员,最好把參数名称设为"value",后加小括号.例:以下的样例FruitName注解就仅仅有一个參数成员。



原文地址:https://www.cnblogs.com/slgkaifa/p/6737030.html