`
huangzw
  • 浏览: 19374 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

J2SE5.0实例---注释(annotation)简单入门

    博客分类:
  • J2SE
阅读更多

J2SE 5.0通过引入注释(Annotation)的概念添加了对元数据的支持。

 

一个@xxx形式的注释可以当成一个修饰符来使用,它可以放在任何一个修饰符可以出现的地方。public,static,final都是java语言的修饰符,注释可以写在它们可以出现的任何地方。

 

举个例子,可以看下面一段代码:

 

public class AnnotationExample {

 

    public @Override int hashCode() {

 

       return super.hashCode();

 

    }

 

}

 

 

 

 

 

 

 

在这个例子中我们使用了一个java语言API中已经有定义的注释@Override,通过在方法hashCode()中使用这个注释,说明了hashCode是一个覆盖了父类方法的方法。

 

至于注释的具体含义我们在以后部分会说明。

 

如果你想使用一个类,你必须首先找到它的定义,或者你自己对它进行定义。注释也是需要定义的,随便在代码中插入一个@XXX之类的注释是不能够通过编译的。

 

一个最简单的Annotation定义类似于接口的定义,就象下面的代码:

 

public @interface Info {

 

}

 

 

 

 

正如你所看到的,里面什么都没有,但是即使是这样,我们也可以在程序里使用它:

 

public @Info String  information;

 

 

 

这样的一种什么都没有定义的空注释我们称为标记注释(marker annotations

 

我们可以在其中添加一个成员的定义:

 

public @interface Info {   

 

     String author();

 

}

 

 

 

 

 

这里值得注意的一点是,注释类中方法的定义不能是私有的,如果你不在前面加public关键字,编译器会默认为它是公有的。

 

在添加上author的定义后,原来那种只写了一个@Info的注释就必须修改了,之后的注释必须这样写:

 

public @Info(author="myname")  void afunction() {

 

}

 

 

 

 

一个注释的成员可以有默认值:

 

public @interface Info {   

 

     String author() default "myname";

 

}

 

 

 

 

 

使用默认值有什么好处呢?我们可以重新这样写了:

 

public @Info  void afunction() {

 

}

 

 

 

 

在做标记时,如果确认某个成员的值和它的默认值相同,我们就可以忽略它,而不必显式地给每个成员赋值,这样就减轻了代码量。

 

如果我们添加的这个成员名字叫做value的话,也就是:

 

public @interface Info {   

 

     String value();

 

}

 

 

 

 

 

就有了另外一种注释的用法: 我们可以直接写出这样的注释@Info(“information”),而不必写@Info(value=”information”),括号里的值会自动传递给value。这样的一种注释称为单一值注释(Single-value annotations

 

一个注释可以有很多类型不同的成员,这样的一种注释称为完整注释(full annotations

 

一个注释中的成员类型只能够是原生类型,字符串,Class类型,注释类型,枚举类型,或者一维数组。

 

假设我们现在有一个注释定义:

 

public @interface Company {

 

    String value();

 

}

 

 

 

 

 

现在我们希望定义另外一个注释,这个注释类型反映了一个人的信息:

 

public @interface Person {

 

    public enum Gender{MALE,FEMALE};

 

   

 

    String name();

 

    int age();

 

    Company company();

 

    Gender gender() default Gender.MALE;

 

    String description() default "";

 

}

 

 

 

 

 

 

 

 

 

 

 

在程序代码中添加这种类型的注释时可以这么写:

 

@Person(age=23,name="MyName",gender=Person.Gender.FEMALE, company=@Company("Foo Corporation"))

 

 

 

java.lang包中定义了三种注释,分别是:

 

n         Deprecated:和过去javadoc@deprecated含义相同

 

n         Override:表示方法覆盖了父类中的方法

 

n         SuppressWarnings:使用这个注释可以使编译器忽略特定类型的警告信息

 

具体含义可以参照api文档。

 

我们知道,注释的引入,为java语言添加了元数据的表达方式,而元数据就是关于数据的数据。在java中,还有关于注释的注释,我们相应的称之为元注释(meta-annotations

 

java中,我们可以使用4种预先定义的注释对注释定义进行注释,这4种注释是:

 

n         Target:指明注释可以在哪些代码段中使用,以避免对注释的误用。

 

n         Retention:说明编译器在编译和运行时是否忽略该种注释

 

n         Documented:说明注释是否出现在Javadoc

 

n         Inherited:当我们在一个类中使用了某种注释,有时候会希望将来它的所有子类中都包含有该种注释信息,如果在注释定义中添加了@Inherited,那么这种注释就会被调用者的子类继承

 

当我们在一个类中使用注释定义了一系列的元数据之后,我们应该如何获取这些元数据呢?我们通过下面的例子来说明。

 

Annotation的定义仍然使用列出来的两个,因为我们需要在获得类文件中的注释信息,所以必须在注释定义中添加Retention注释。

 

首先我们定义两个注释,注释Todo说明了还有什么事情需要做:

 

import java.lang.annotation.Retention;

 

import java.lang.annotation.RetentionPolicy;

 

 

@Retention(RetentionPolicy.RUNTIME)

 

public @interface Todo {

 

    String value();

 

}

 

 

 

 

 

 

 

 

 

注释Author说明了一个方法或者类的定义者:

 

import java.lang.annotation.Retention;

 

import java.lang.annotation.RetentionPolicy;

 

 

@Retention(RetentionPolicy.RUNTIME)

 

public @interface Author {

 

    public enum Gender{MALE,FEMALE};

 

 

    String name();

 

    String email();

 

    Gender gender() default Gender.MALE;

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

然后我们在一个简单的类中添加这两种类型的注释:

 

public @Todo("delete this class") class Foo {

 

   

 

    public void methodA(){}

 

    public @Author(name="B",email="b@Foo.com") void methodB(){

 

    }

 

   

 

    public @Author(name="A",email="a@Foo.com") String  fieldA;

 

}

 

 

 

 

 

 

 

 

 

 

通过下面一段代码我们可以提取相应的元数据:

 

import java.lang.reflect.Method;

 

 

public class GetAnnotations {

 

评论

相关推荐

    J2SE 5.0- Java安全及网络计算的最新技术

    标题与描述中的“J2SE 5.0- Java安全及网络计算的最新技术”强调了Java标准版(J2SE)在版本5.0中引入的安全性和网络功能的增强。这一版本标志着Java平台在安全性、加密技术以及网络通信方面的重要进展,为开发者...

    J2SE5.0_CN.chm API中文手册

    J2SE5.0_CN.chm API中文手册

    J2SE 5.0 API (中文版)

    J2SE 5.0,也被称为 Java 5.0,是 Java 发展历程中的一个重要版本,它引入了许多创新特性,极大地提升了开发效率和代码质量。此资源是一个中文版的 J2SE 5.0 API 文档,对于学习和理解 Java 5.0 的新特性和库函数...

    JAVA API官方文档中文版CHM版(J2SE5.0)

    Java API官方文档中文版CHM版(J2SE5.0)是Java开发的重要参考资料,它详尽地阐述了Java 2 Standard Edition 5.0(通常称为Java 5.0)中的各种类库和接口。这个CHM(Compiled HTML Help)文件是一个经过编译的HTML...

    J2SE5.0 API.chm

    J2SE5.0 API.chm,这个是英文的,等会再上传中文的,两个加在一起太大了 只好分开传了。。。

    J2SE 5.0新特性精解

    标题:“J2SE 5.0新特性精解” 描述:“对J2SE 5.0中的一些新特性进行了精辟的讲解。” J2SE 5.0是Java Standard Edition的一个重大更新,它引入了一系列的新特性和改进,旨在提高开发效率、提升性能以及增强平台...

    j2se5.0_API

    很好的j2se的API

    j2se5.0中文版api

    j2se5.0中文版api第2部分,因为上传权限有限,给大家带来不便,请见谅

    J2SE 5.0专题 之 语言特性

    ### J2SE 5.0 之 语言特性详解 #### 1.1 背景 随着 J2SE 5.0 的正式发布,Java 社区迎来了一个全新的里程碑。自 Java 1.4 升级至 5.0 版本以来,开发者们对新版本中的诸多改进和新特性充满了期待。为了更好地理解 ...

    upload.jar for J2SE 5.0

    "upload.jar for J2SE 5.0" 是一个专为 Java 2 Standard Edition (J2SE) 5.0 版本设计的类库,主要用于处理文件上传功能。这个库是在 sun java jdk 1.5.0 开发环境中构建的,它提供了解决方案,使得开发者能够方便地...

    由韩国出版的J2SE 5.0版的JAVA 2教材源代码

    J2SE 5.0是这个平台的一个重要里程碑,它引入了许多关键的新特性,提升了Java的效率、可读性和可维护性。本教材源代码正是围绕这一版本展开,对于学习和理解Java编程具有很高的价值。 1. **自动装箱与拆箱**:J2SE ...

    J2SE5.0中文版API

    对于java开发人员来说 没有一个帮助文档是很郁闷的 尤其对于自学的朋友们,今天得到一个中文版的J2SE5.0的API,不敢独自享用,共享出来给大家,分为2个部分part01和part02

    J2SERuntimeEnvironment5.0开发者版

    J2SE 5.0,也被称为Java SE 5.0,是这个平台的一个重要版本,发布于2004年,它带来了许多重大的改进和新特性,对Java编程语言和Java虚拟机(JVM)进行了显著的升级。 1. **泛型(Generics)** J2SE 5.0引入了泛型...

    真心福利放送Java API帮助文档网页版(J2SE 5.0)

    J2SE(Java 2 Standard Edition)5.0是Java平台的一个重要版本,它在2004年发布,引入了许多新的特性和改进,对Java开发者来说具有里程碑式的意义。 Java API文档是开发者的必备工具,它详尽地记录了Java类库的所有...

    j2se api 5.0 中文版

    真正的j2se api 5.0 中文版帮助,有需要的可以下载.

    J2SE 5.0 API [1] (中文版)

    提示:本人已将一次性可完整下载版上传,名称为:J2SE 5.0 API (中文版)方便网友下载! 很好用的J2SE 5.0 API,具有索引的功能!!! 下载前请注意:不过由于本人等级太低所以只能分3部分上传,劳烦您下载全部3部分...

    J2SE 5.0 API [2] (中文版)

    提示:本人已将一次性可完整下载版上传,名称为:J2SE 5.0 API (中文版)方便网友下载! 很好用的J2SE 5.0 API,具有索引的功能!!! 下载前请注意:不过由于本人等级太低所以只能分3部分上传,劳烦您下载全部3部分...

    J2SE 5.0 API [3] (中文版)

    提示:本人已将一次性可完整下载版上传,名称为:J2SE 5.0 API (中文版)方便网友下载! 很好用的J2SE 5.0 API,具有索引的功能!!! 下载前请注意:不过由于本人等级太低所以只能分3部分上传,劳烦您下载全部3部分...

    【一脚揣进J2SE】视频教程(持续更新)

    资源名称:【一脚揣进J2SE】视频教程(持续更新)资源目录:【】《一脚踹进J2SE》1-1Java...《一脚踹进J2SE》2-2注释,标识符命名规则及Java中的关键字【I 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

Global site tag (gtag.js) - Google Analytics