Java教程:怎么运用Annotation

http://www.ndnha2bn.com/  2010-03-07 16:39:39  来历:mxjava.com 

Webjx澳门彩票官网提示:首要让咱们从 Java 界说的 Annotation 开端。@Override 可能是咱们最常用到的 Annotation 之一了,Eclipse 中当子类中的某个办法覆写的父类中的办法时,会亮黄灯提示。若用 @Override 润饰该办法,黄灯平息。

 装备文件的优点在于进一步下降耦合,使运用更易于扩展,即便对装备文件进行了修正也不需求对工程进行修正和从头编译。缺陷也是清楚明晰,装备文件读取和解析需求花费必定的时刻,装备文件过多时难以办理,IDE 无法对装备的正确性进行校验,给测验增加了难度。根据以上原因,Java 从1.5开端供给了 Annotation (注释,标示),它用来润饰运用程序的元素(类,办法,特点,参数,本地变量,包、元数据),编译器将其与元数据一起存储在 class 文件中,运转期间经过 Java 的反射来处理对其润饰元素的拜访。Annotation 只是用来润饰元素,而不能影响代码的履行。只要经过其配套的结构或东西才干对其信息进行拜访和处理。这一点与 xml 相同,没有 struts api 的 struts.xml 文件对程序不会起来任何效果。

  Q:怎么运用 Annotation ?
  A:首要让咱们从 Java 界说的 Annotation 开端。@Override 可能是咱们最常用到的 Annotation 之一了,Eclipse 中当子类中的某个办法覆写的父类中的办法时,会亮黄灯提示。若用 @Override 润饰该办法,黄灯平息。再让咱们来看一个比如,当咱们运用 new java.util.Date(2010, 2, 25); 来初始化日期类时,Eclipse 仍然会亮黄灯提示,这是由于该办法被 @Deprecated 润饰了,表明不引荐运用。从这两个比如咱们能够了解到,Annotation 是在编译期校验的。这一点最大的优点是在编译期间就可对过错进行处理。若运用 xml 的话,只要在运转期才干得到过错信息。

  Q:Java 标准的 Annotation 有哪些?
  A:@Deprecated 相当于Javadoc的@deprecated,被@Deprecated标示的目标class, method等被注明为不引荐运用。首要用于javac等编译东西。
    @Override 注明目标method重载了父类的办法。javac等编译东西编译时会根据此Annotation判别重载办法是否正确。
    @SuppressWarnings 告知javac等编译器疏忽所指定的特定的正告信息。
    @Target 被界说的annotation能够附加在那些目标上。
    @Retention annotation的效果期间。
    这儿咱们要要点介绍两个 Annotation ,由于这两个 Annotation 有一点特别,由于它们并不是用来润饰代码,而是用来润饰 Annotation 的。
  @Target 用来标示界说的 Annotation 能够附加在那些目标上。可选参数包含CONSTRUCTOR(结构器)、FIELD(特点及enum实例)LOCAL_VARIABLE(局部变量)、METHOD(办法)、PACKAGE(包)、PARAMETER(参数)以及TYPE(类、接口、注解类型、enum)。下例界说的 Annotation 被 @Target 润饰,表明该 Annotation 能够用来润饰特点和参数。

    @Target( { FIELD,  PARAMETER})
    public @interface Resource {
      public String id() default "";
    }

  运用办法:

    public class Mxjava {
      @Resource(id="http://www.mxjava.com")
      private String url;
      public void getLog(@Resource(id="001") String logId) {...}
    }

  @Retention 用标示在什么等级保存该 Annotation 。可选参数包含SOURCE(编译期会被疏忽不做保存)、CLASS(编译后的 class 文件中可用,但虚拟机运转时疏忽)、RUNTIME(运转期保存,若要运用反射机制读取 Annotation 信息的话,运用该项。)

    @Target( { FIELD,  PARAMETER})
    @Retention(RUNTIME)
    public @interface Resource {
      public String id() default "";
    }

  Q:怎么界说 Annotation ?
  A:先让咱们来看一个最简略的 Annotation 。

    @Target( { FIELD })
    @Retention(RUNTIME)
    public @interface Resource {
      public String id() default "";
    }

    @Target 是 Java 标准的 Annotation,本例中指定界说的 Annotation 能够附加在特点(Field)上。@Retention 也是 Java 标准的 Annotation,指定效果期间是运转期。@interface 是用来润饰 Annotation 的,请注意,它不是 interface。这个关键字声明隐含了一个信息:它是承继了 java.lang.annotation.Annotation 接口,而不是声明晰一个 interface。Annotation 成员的界说看上去很象办法,default “” 表明默认值为空字符串。运用办法如下:

    public class mxjava {
      @Resource(id="http://www.mxjava.com")
      private String url;
    }

    若没有配套的结构和东西,@Resource 是不起任何效果的。就象前面讲到的那样,它不会对代码的履行有任何影响。

  Q:什么时候需求自界说 Annotation ?
  A:一般来说,若不做结构和东西的开发,一般情况下是不需求自界说 Annotation 的。

更多

引荐文章