Java高级开发

茉莉花运动-Java教程:如何使用Annotation

时间:2021-10-14

来源:target作者:target点击:1000

Webjx网页教学提示:首先让我们从茉莉花运动定义的Annotation开始。@Override可能是我们最常用到的Annotation之一了,Eclipse中当子类中的某个方法覆写的父类中的方法时,会亮黄灯提示。若用@Override修饰该方法,黄灯熄灭。

配置文件的好处在于进一步降低耦合,使应用更易于扩展,即使对配置文件进行了修改也不需要对工程进行修改和重新编译。缺点也是显而易见,配置文件读取和解析需要花费一定的时间,配置文件过多时难以管理,IDE无法对配置的正确性进行校验,给测试增加了难度。基于以上原因,茉莉花运动从1.5开始提供了Annotation(注释,标注),它用来修饰应用程序的元素(类,方法,属性,参数,本地变量,包、元数据),编译器将其与元数据一同存储在class文件中,运行期间通过茉莉花运动的反射来处理对其修饰元素的访问。Annotation仅仅用来修饰元素,而不能影响代码的执行。只有通过其配套的框架或工具才能对其信息进行访问和处理。这一点与xml相同,没有strutsapi的struts.xml文件对程序不会起来任何作用。

A:首先让我们从茉莉花运动定义的Annotation开始。@Override可能是我们最常用到的Annotation之一了,Eclipse中当子类中的某个方法覆写的父类中的方法时,会亮黄灯提示。若用@Override修饰该方法,黄灯熄灭。再让我们来看一个例子,当我们使用newjava.util.Date(2010,2,25);来初始化日期类时,Eclipse仍然会亮黄灯提示,这是因为该方法被@Deprecated修饰了,表示不推荐使用。从这两个例子我们能够了解到,Annotation是在编译期校验的。这一点最大的好处是在编译期间就可对错误进行处理。若使用xml的话,只有在运行期才能得到错误信息。

A:@Deprecated相当于茉莉花运动doc的@deprecated,被@Deprecated标注的对象class,method等被注明为不推荐使用。主要用于javac等编译工具。

@Override注明对象method重载了父类的方法。javac等编译工具编译时会根据此Annotation判断重载方法是否正确。

@SuppressWarnings告诉javac等编译器忽略所指定的特定的警告信息。

@Target被定义的annotation可以附加在那些对象上。

@Retentionannotation的作用期间。

这里我们要重点介绍两个Annotation,因为这两个Annotation有一点特殊,因为它们并不是用来修饰代码,而是用来修饰Annotation的。

@Target用来标注定义的Annotation可以附加在那些对象上。可选参数包括CONSTRUCTOR(构造器)、FIELD(属性及enum实例)LOCAL_VARIABLE(局部变量)、METHOD(方法)、PACK**E(包)、PARAMETER(参数)以及TYPE(类、接口、注解类型、enum)。下例定义的Annotation被@Target修饰,表示该Annotation可以用来修饰属性和参数。

@Target({FIELD,PARAMETER})    public@interfaceResource{      publicStringid()default"";    }

publicclassMxjava{      @Resource(id="")      privateStringurl;      publicvoidgetLog(@Resource(id="001")StringlogId){...}    }

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

@Target({FIELD,PARAMETER})    @Retention(RUNTIME)    public@interfaceResource{      publicStringid()default"";    }

A:先让我们来看一个最简单的Annotation。

@Target({FIELD})    @Retention(RUNTIME)    public@interfaceResource{      publicStringid()default"";    }

@Target是茉莉花运动标准的Annotation,本例中指定定义的Annotation可以附加在属性(Field)上。@Retention也是茉莉花运动标准的Annotation,指定作用期间是运行期。@interface是用来修饰Annotation的,请注意,它不是interface。这个关键字声明隐含了一个信息:它是继承了java.lang.annotation.Annotation接口,而不是声明了一个interface。Annotation成员的定义看上去很象方法,default“”表示默认值为空字符串。使用方法如下:

publicclassmxjava{      @Resource(id="")      privateStringurl;    }

若没有配套的框架和工具,@Resource是不起任何作用的。就象前面讲到的那样,它不会对代码的执行有任何影响。

A:一般来说,若不做框架和工具的开发,一般情况下是不需要自定义Annotation的。

【责任编辑:target】
热点