`
yuping322
  • 浏览: 93332 次
  • 来自: ...
社区版块
存档分类
最新评论

Annotation简介

阅读更多

    对于Annotation,是Java5的新特性,下面是Sun的Tutorial的描述,因为是英文,这里我翻译下,希望能够比较清晰的描述一下Annotation的语法以及思想。
Annotation:
Release 5.0 of the JDK introduced a metadata facility called annotations. Annotations provide data about a program that is not part of the program, such as naming the author of a piece of code or instructing the compiler to suppress specific errors. An annotation has no effect on how the code performs.
Annotations use the form @annotation and may be applied to a program's declarations: its classes, fields, methods, and so on. The annotation appears first and often (by convention) on its own line, and may include optional arguments:


JDK5引入了Metedata(元数据)很容易的就能够调用Annotations.Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。An annotation 对代码的执行没有什么影响。Annotations使用@annotation的形势应用于代码:类(class),属性(field),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。
@Author("MyName")
class myClass() { }

or
@SuppressWarnings("unchecked")
void MyMethod() { }

Defining your own annotation is an advanced technique that won't be described here, but there are three built-in annotations that every Java programmer should know: @Deprecated, @Override, and @SuppressWarnings. The following example illustrates all three annotation types, applied to methods:

定义自己的Annotation是一个比较高级的技巧,这里我们不做讨论,这里我们仅仅讨论每一个Java programer都应该知道的内置的annotations:@Deprecated, @Override, and @SuppressWarnings。下面的程序阐述了这三种annotation如何应用于methods。
import java.util.List;

class Food {}
class Hay extends Food {}
class Animal {
    Food getPreferredFood() {
        return null;
    }
    /**
     * @deprecated document why the method was deprecated
     */
    @Deprecated
    static void deprecatedMethod() { }
}
class Horse extends Animal {
    Horse() {
        return;
    }
    @Override
    Hay getPreferredFood() {
        return new Hay();
    }
    @SuppressWarnings("deprecation")
    void useDeprecatedMethod() {
        Animal.deprecateMethod(); //deprecation warning - suppressed
    }
}

@Deprecated
The @Deprecated annotation indicates that the marked method should no longer be used. The compiler generates a warning whenever a program uses a deprecated method, class, or variable. When an element is deprecated, it should be documented using the corresponding @deprecated tag, as shown in the preceding example. Notice that the tag starts with a lowercase "d" and the annotation starts with an uppercase "D". In general, you should avoid using deprecated methods — consult the documentation to see what to use instead.

@Deprecated
@Deprecated annotation标注一个method不再被使用。编译器在一个program(程序?)使用了不赞成的方法,类,变量的时候会产生警告(warning)。如果一个元素(element:method, class, or variable)不赞成被使用,应该像前面的例子里使用相应的@deprecated 标签,并且注意标签的首字母是小写的"d",而annotation时大写的"D"。一般情况下,我们应该避免使用不赞成使用的方法(deprecated methods),而应该考虑替代的方法。

@Override
The @Override annotation informs the compiler that the element is meant to override an element declared in a superclass. In the preceding example, the override annotation is used to indicate that the getPreferredFood method in the Horse class overrides the same method in the Animal class. If a method marked with @Override fails to override a method in one of its superclasses, the compiler generates an error.
While it's not required to use this annotation when overriding a method, it can be useful to call the fact out explicitly, especially when the method returns a subtype of the return type of the overridden method. This practice, called covariant return types, is used in the previous example: Animal.getPreferredFood returns a Food instance. Horse.getPreferredFood (Horse is a subclass of Animal) returns an instance of Hay (a subclass of Food). For more information, see Overriding and Hiding Methods.

@Override
@Override annotation 告诉编译器当前元素是重写(override)自父类的一个元素。在前面的例子中,override annotation用来说明Horse类中的getPreferredFood这个方法重写(override)自Animal类中相同的方法。如果一个方法被标注了@Override,但是其父类中没有这个方法时,编译器将会报错。
但是并不是说我们一定要使用这个annotation,但是它能够很明显的给出实际行为,尤其是在方法返回一个被重写的方法返回类型的子类型的时候。上面的例子中,Animal.getPreferredFood 返回一个 Food实例,Horse.getPreferredFood 返回一个Hay实例,这里Horse是Animal的子类,Hay是Food的子类。

@SuppressWarnings
The @SuppressWarnings annotation tells the compiler to suppress specific warnings that it would otherwise generate. In the previous example, the useDeprecatedMethod calls a deprecated method of Animal. Normally, the compiler generates a warning but, in this case, it is suppressed.
Every compiler warning belongs to a category. The Java Language Specification lists two categories: "deprecation" and "unchecked". The "unchecked" warning can occur when interfacing with legacy code written before the advent of generics. To suppress more than one category of warnings, use the following syntax:
@SuppressWarnings
@SuppressWarnings annotation 告诉编译器禁止别的元素产生的特殊的警告(warnings),在前面的例子里,useDeprecatedMethod调用了Animal的不赞成使用的一个方法。一般情况下,编译器会给出一个警告(warning),但是在这种情况下,不会产生这个警告,也就是说被suppress。
每个编译器的警告都属于一个类型。Java Language Specification列出了两种类型:"deprecation" 和 "unchecked"。"unchecked" warning 发生在使用非generic的旧代码交互的generic collection类时。为了禁止不止一种的警告时,使用下面的语法:
@SuppressWarnings({"unchecked", "deprecation"})

关于Annotation还可以参考下面的文章:
作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)
原文: http://www.matrix.org.cn/resource/article/44/44048_Java+Annotation.html
http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html



分享到:
评论

相关推荐

    Spring Annotation简介一

    【Spring Annotation简介一】 在Java开发领域,Spring框架以其强大的功能和灵活性深受广大开发者喜爱。Spring Annotation是Spring框架中的一个重要特性,它极大地简化了配置,提高了代码的可读性和可维护性。这篇...

    Hibernate Annotation 中文文档

    Hibernate Annotation简介** Hibernate Annotation是Hibernate框架的一个扩展,它允许开发者直接在Java类和属性上使用注解(Annotations),来定义实体类与数据库表之间的映射关系。相比于XML配置,注解提供了一种...

    前端项目-d3-annotation.zip

    **D3-Annotation简介** D3-Annotation是D3生态系统的一部分,它提供了丰富的注释功能,可以帮助开发者在SVG图表中添加各种类型的注释,如线性、矩形、圆形、箭头等,使得可视化更易理解,更具交互性。通过使用D3-...

    Annotation注解的介绍和使用

    ##### 1.3 Annotation简介 Annotation,即注解,是Java 5.0引入的一个新特性,用于向代码中插入元数据。它是一种声明式机制,允许开发者在代码中嵌入非功能性数据,这些数据不会影响代码的运行逻辑,但可以被编译器...

    Java实战篇:设计自己的Annotation

    **2.1 Annotation简介** Annotation是Java 1.5引入的新特性,用于向代码中添加元数据。它们可以用于各种目的,例如提供编译时的额外信息、指导工具行为等。为了创建和使用自定义Annotation,需要了解以下关键概念:...

    Hibernate Annotation 笔记 总结 注解

    ### Hibernate Annotation简介 1. **注解替代XML映射**:在Hibernate 3.2及更高版本中,引入了Annotation支持,开发者可以直接在Java实体类上使用注解来定义持久化字段和关系,不再需要创建单独的`.hbm.xml`映射...

    Hibernate Annotation笔记

    #### 一、Hibernate Annotation简介 Hibernate作为Java领域内最流行的ORM框架之一,在过去的几年中经历了显著的发展,已经成为Java数据库持久化的事实标准。它不仅功能强大,而且灵活性高、性能优越。随着Java 5的...

    Junit4教程非常详尽

    一、Annotation 简介 Annotation 是 Java5 中引入的一种元数据特性,用于描述数据的数据。它可以用来和 public、static 等关键字一样来修饰类名、方法名、变量名。Annotation 的作用是描述这个数据是做什么用的,...

    Spring MVC Annotation验证的方法

    一、Spring MVCAnnotation 验证简介 Spring MVC 框架提供了多种Annotation来实现验证,例如 @NotNull、@NotBlank、@Email 等。这些 Annotation 可以直接应用于模型(Model)中的属性上,从而实现数据验证。 二、...

    Java Annotation详解及实例代码

    一、Annotation简介 Annotation是一种声明式编程方式,它通过在代码中添加特殊标记(@符号后的名称)来提供附加信息。虽然Annotation本身不会改变程序的行为,但是可以通过Annotation Processing Tool (APT) 来解析...

    hibernate annotation 中文文档

    ### Hibernate Annotation 中文文档知识点概览 #### 一、创建注解项目 ##### 1.1 系统需求 在创建一个使用 Hibernate 注解的项目之前,需要满足一定的系统环境需求,例如支持 Java 的开发环境、JDK 版本、支持 ...

    hibernate annotation hibernate3

    一、Hibernate 3简介 Hibernate 3是Hibernate ORM框架的一个重要版本,它引入了许多新特性,如对JPA(Java Persistence API)的支持,以及对注解的广泛使用。这一版本的更新使得Hibernate更加易于使用,同时也提高了...

    基于Annotation的Java单元测试框架.pdf

    "基于Annotation的Java单元测试框架" 本文主要介绍了基于Annotation的Java单元测试框架,讨论了...七、作者简介 作者黄索,湖南城建职业技术学院信息工程系教师,研究方向为Java企业级应用开发和自动化测试。

    springboot aspect通过@annotation进行拦截的实例代码详解

    本篇文章详细地介绍了springboot aspect通过@annotation进行拦截的方法,包括AspectJ简介、SpringBoot中AspectJ的使用、@annotation的使用、Around advice、拦截器的实现、使用@annotation进行拦截、单元测试和...

    struts2 annotation 文件下载

    #### 二、Struts2框架简介 Struts2是基于Java的一个开源MVC框架,它继承了Struts1的设计理念,并且采用了拦截器架构,这使得它可以更好地与Spring、Hibernate等其他框架集成。Struts2支持多种配置方式,如XML配置、...

    java8源码-Annotation_demo:Annotation_demo

    java8 源码 Java注解 简介 由于无论在Java后台或者Android开发中我们经常遇到注解这个...通过@Target进行添加到注解中,说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Ann

    propbank annotation guideline1

    ### PropBank Annotation Guideline #### 一、PropBank简介 PropBank是一种用于自然语言处理(NLP)领域的语义知识库标注工具。它主要用于构建动词框架(verb frames),这些框架能够帮助理解句子中动作的发生方式...

    struts2利用注解annotation实现文件下载

    #### 一、Struts2框架简介 Struts2是一个基于MVC架构的Java Web应用框架,它继承了Struts1的优点,并在此基础上进行了改进。Struts2框架的核心是拦截器机制,这使得开发者能够更加灵活地处理请求和响应。Struts2还...

Global site tag (gtag.js) - Google Analytics