zoukankan      html  css  js  c++  java
  • Java的注解(Annotation)

    1.什么是注解

    Annotation is code about the code, that is metadata about the program itself.

    Java注解,是Java5.0引入的一种插入源代码中用于某种工具处理的标签。注解不会改变程序的编译方式和运行结果,但能被编译器、注解工具或其他工具解析。

    2.注解的使用

    在一般的Java开发中,最常接触到的可能就是@Override@SupressWarnings这两个注解了。使用@Override的时候只需要一个简单的声明即可。这种称为标记注解(marker annotation ),它的出现就代表了某种配置语义。

    其它的注解是可以有自己的配置参数的。配置参数以名值对的方式出现。使用 @SupressWarnings的时候需要类似@SupressWarnings({"uncheck", "unused"})这样的语法。在括号里面的是该注解可供配置的值。由于这个注解只有一个配置参数,该参数的名称默认为value,并且可以省略。而花括号则表示是数组类型。如:

    public interface IPlatformProperties {
        
        @Value("database.url")
        String databaseURL();
        
        @Value("database.login")
        String databaseLogin();
        
        @Value("database.mac")
        String databaseMAC();
        
        @Value("publisher.from.socket")
        boolean isFromSocket();
        
        @Value("publisher.buffersize")
        int ringbufferSize();
        
    }

    3.注解的语法

    每个注解必须通过一个注解接口进行定义,接口中的方法与注解中的元素相对应。例如:

    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Value {
    
        /**
         * The actual value expression: e.g. "#{systemProperties.myProp}".
         */
        String value();
        
    }

    又或者带有默认值的注解定义:

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface Assignment {
        String assignee();
        int effort();
        double finished() default 0;
    } 

    @interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。可以通过default来声明参数的默认值。在这里可以看到@Retention@Target这样的元注解,用来声明注解本身的行为。@Retention用来声明注解的保留策略,有CLASSRUNTIMESOURCE这三种,分别表示注解保存在类文件、JVM运行时刻和源代码中。只有当声明为RUNTIME的时候,才能够在运行时刻通过反射API来获取到注解的信息。@Target用来声明注解可以被添加在哪些类型的元素上,如类型、方法和域等。

    一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;相反,@Deprecated里面的Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被Deprecated。

    除了@Retention@Target这样的元注解,还有@Documented和@Inherited这两个注解。

    4.处理注解

    根据,@Retention元注解的定义,注解可以在编译期间和运行时处理。一般来说,在运行时利用反射,取得注解的具体值,然后进行处理,例子在这里。编译期间的注解处理还没遇过,不过可以参考这里的例子。

    本文完

    参考:

    http://javapapers.com/core-java/java-annotations/

    http://www.infoq.com/cn/articles/cf-java-annotation

    http://www.iteye.com/topic/36659

  • 相关阅读:
    一些无意间YY的脑瘫题
    回滚莫队
    数论
    专题整理
    模拟赛x+1
    HISKrrr的板子库
    java多线程学习笔记(四)
    java多线程学习笔记(三)
    java多线程学习笔记(二)
    Java多线程学习笔记(一)
  • 原文地址:https://www.cnblogs.com/techyc/p/2956636.html
Copyright © 2011-2022 走看看