Java中的基本注解(包括元注解)

Annotation

    从JDK 1.5开始,Java增加了对元数据(MeteData)的支持,也就是annotation(注释),这种Annotation与前面讲的注释有一定的却别,它是代码一种特殊的标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过Annotation,程序员可以在不更改源码的情况下嵌入一些补充信息,访问和处理Annotation的工具统称为APT(Annotation Processing Tool)。代码分析工具、开发工具可以利用这些补充信息进行验证,比如Eclips可以根据@Override检查复写方法的正确性。   
    标准的Annotation

    先看下Java提供的3个最基本的Annotation的用法:
    @Deprecated
    可作用于方法、类、接口等,它的作用于文档中注释中的@deprecated基本相同,是告诉编译器此方法、类等已经不建议使用了,以便在编程时给出警告。
    
    @Override
    只能作用于方法,用于指出该方法是重载父类的方法,它的作用是告诉编译器检查这个方法的语法是否正确,避免犯一些方法名称写错的低级错误。
    
    @SuppressWarnings
    用于消除编译器警告,在某些情况下编译警告是被允许或者合法,在这种情况下就可以使用@SuppressWarnings消除编译器警告
    
    如果你是用IDE工具Eclips开发Android 应用程序,你会发现上面提到的三个Annotation不需要手动添加,Eclips会自动提示你警告的原因以及解决办法,并自动帮你生成合适的Annotation补充信息,基本不需要程序员手动添加。

    @SafeVarargs
    @SafeVarargs是JDK 7 专门为抑制“堆污染”警告提供的。
    @FunctionalIterface   (java 8 新增的)
        函数式接口。Java8规定:如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。 @FunctionalInterface就是用来指定某个接口必须是函数式接口,否则就会编译出错。
@FunctionalInterface
public interface Fun
        static void foo(){
          System. out .println( "foo类方法" );
       }
        default void bar(){
           System. out .println( "bar默认方法" );
       }
        void test(); //只定义了一个抽象方法
}
如在上面的接口中再加一个抽象方法abc(),则会编译出错。
   
    自定义Annotation

    除了标准的Annotation,程序员还可以编写自定义的Annotation,自定义的Annotation可用于debug和编写一些测试程序。
    java中自定义annotation需要@interface关键字和用到几个内置annotation(元注解)。用到的元注解有@Target, @Retention, @Documented, @Inherited ,用途如下:
    @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
        ElemenetType.CONSTRUCTOR 构造器声明
        ElemenetType.FIELD 域声明(包括 enum 实例)
        ElemenetType.LOCAL_VARIABLE 局部变量声明
        ElemenetType.METHOD 方法声明
        ElemenetType.PACKAGE 包声明
        ElemenetType.PARAMETER 参数声明
        ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
         
    @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
        RetentionPolicy.SOURCE 注解将被编译器丢弃
        RetentionPolicy.CLASS 注解在class文件中可用,但会被JVM丢弃
        RetentionPolicy.RUNTIME JVM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
         
    @Documented 将此注解包含在 javadoc 中
     
    @Inherited 允许子类继承父类中的注解





猜你喜欢

转载自blog.csdn.net/coderDogg/article/details/80348191