- 浏览: 92617 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
easy_open_can:
有些疑问,希望请教,加我QQ:7461942
WinLIKE仿微软视窗属性(二) -
zhangzhiya:
good!好东西。正好用到。
jstl fn 函数 -
fcoffee:
需要这么高深么? <连接名称>->属性-&g ...
WindowsXP修改MAC地址
注释分为三个基本种类:
@MarkerAnnotation
是标记注释。它不包含数据,仅有注释名称。 @SingleValueAnnotation("my data")
。除了 @
标记外,这应该与普通的 Java 方法调用很像。 @FullAnnotation(var1="data value 1", var2="data value 2", var3="data value 3")
。
一个例子如下:
@TODOItems({ // Curly braces indicate an array of values is being supplied @TODO( severity=TODO.CRITICAL, item="Add functionality to calculate the mean of the student's grades", assignedTo="Brett McLaughlin" ), @TODO( severity=TODO.IMPOTANT, item="Print usage message to screen if no command-line flags specified", assignedTo="Brett McLaughlin" ), @TODO( severity=TODO.LOW, item="Roll a new website page with this class's new features", assignedTo="Jason Hunter" ) })
Override
应该仅用于方法(不用于类、包声明或其他构造)。它指明注释的方法将覆盖超类中的方法。eg:
package quickstart.service;
import quickstart.model.Person;
public class PersonServiceImpl implements PersonService {
@Override
public void remove(int id) {
// TODO Auto-generated method stub
}
@Override
public void save(Person person) {
// TODO Auto-generated method stub
}
}
Deprecated
是标记注释。可以使用 Deprecated
来对不应再使用的方法进行注释。与 Override
不一样的是, Deprecated
应该与正在声明为过时的方法放在同一行中
package com.oreilly.tiger.ch06; public class DeprecatedClass { @Deprecated public void doSomething() { // some code } public void doSomethingElse() { // This method presumably does what doSomething() does, but better } }
SuppressWarnings 注释
个人理解:编译器在编译时阻止某种类型的Warnings。
指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。
注意,在给定元素中取消显示的警告集是所有包含元素中取消显示的警告的超集。
例如,如果注释一个类来取消显示某个警告,同时注释一个方法来取消显示另一个警告,那么将在此
方法中同时取消显示这两个警告。 根据风格不同,程序员应该始终在最里层的嵌套元素上使用此注释,
在那里使用才有效。如果要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。
它实际上是 Tiger 的所有新功能的副功能。例如,以泛型为例;泛型使所有种类的新类型安全操作
成为可能,特别是当涉及 Java 集合时。然而,因为泛型,当使用集合而 没有 类型安全时,编译器
将抛出警告。这对于针对 Tiger 的代码有帮助,但它使得为 Java 1.4.x 或更早版本编写代码非
常麻烦。将不断地收到关于根本无关的事情的警告。如何才能使编译器不给您增添麻烦?
SupressWarnings
可以解决这个问题。SupressWarnings
与Override
和Deprecated
不同,
是具有变量的 — 所以您将单一注释类型与该变量一起使用。可以以值数组来提供变量,
其中每个值指明要阻止的一种特定警告类型。 例如:
清单 5. 不是类型安全的 Tiger 代码
public void nonGenericsMethod() { List wordList = new ArrayList(); // no typing information on the List wordList.add("foo"); // causes error on list addition } 编译时会有 Warning info.清单 6 通过使用SuppressWarnings
注释消除了这种问题。@SuppressWarings(value={"unchecked"}) public void nonGenericsMethod() { List wordList = new ArrayList(); // no typing information on the List wordList.add("foo"); // causes error on list addition }仅需要找到警告类型(图 3 中显示为“unchecked”),并将其传送到SuppressWarnings
中。SuppressWarnings
中变量的值采用数组,使您可以在同一注释中阻止多个警告。例如,@SuppressWarnings(value={"unchecked", "fallthrough"})
使用两个值的数组。此功能为处理错误提供了非常灵活的方法,无需进行大量的工作。@SuppressWarings("serial"): 关闭了类或方法级别的编译器警告。@SuppressWarings(value={"deprecation"}):的作用就是抑制编译器报deprecation的错。 @SuppressWarings(value={"deprecation"})只支持一个参数,是数组类型,所以你可以不用加value。参考文档: http://www-128.ibm.com/developerworks/cn/java/j-annotate2.html自己写注解,文档很详细,直接拷贝过来。
Tiger 中的注释,第 2 部分: 定制注释Write your own annotations in Java 5 |
级别: 初级 Brett McLaughlin (brett@newInstance.com), 作者/编者, O'Reilly Media, Inc 2004 年 9 月 01 日 本系列文章的 第 1 部分介绍了注释 —— J2SE 5.0 中新的元数据工具,并重点讨论了 Tiger 的基本内置注释。一个更强大的相关特性是支持编写自己的注释。本文中,Brett McLauglin 说明了如何创建定制注释,如何用自己的注释注解文档,并进一步定制代码。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> 本系列的第一篇文章 介绍了什么是元数据,元数据的重要性,以及如何使用 J2SE 5.0(也叫做 Tiger)的基本内置注释。如果习惯了这些概念,您可能已经在想,Java 5 提供的三种标准注释也并不是特别健壮,能使用的只有 @ )的形式注释其他 Java 代码。我将一步一步地介绍这个过程。
定义新的注释类型与创建接口有很多类似之处,只不过 interface 关键字之前要有一个 @ 符号。清单 1 中给出的是一个最简单的注释类型的示例:
清单 1. 非常简单的注释类型
清单 1 的含义非常明显。如果编译这个注释类型,并确信其位于类路径中,那么您就可以在自己的源代码方法中使用它,以指出某个方法或类仍在处理中,如清单 2 所示: 清单 2. 使用定制的注释类型
清单 1 所示注释类型的使用方法和内置注释类型的使用方法完全相同,只不过要同时使用名称和所在的包来指示定制注释。当然,一般的 Java 规则仍然适用,您可以导入该注释类型,直接使用
上面所示的基本用法还远远不够健壮。您一定还记得“第 1 部分”中曾经提到的,注释类型可以有成员变量(请参阅 参考资料)。这一点非常有用,尤其是准备将注释作为更加复杂的元数据,而不仅仅将它作为原始文档使用的时候。代码分析工具喜欢加工大量的信息,定制注释可以提供这类信息。 注释类型中的数据成员被设置成使用有限的信息进行工作。定义数据成员后不需要分别定义访问和修改的方法。相反,只需要定义一个方法,以成员的名称命名它。数据类型应该是该方法返回值的类型。清单 3 是一个具体的示例,它澄清了一些比较含糊的要求: 清单 3. 向注释类型添加成员
尽管清单 3 看起来很奇怪,但这是注释类型所要求的格式。清单 3 定义了一个名为
这里同样没有多少花样。清单 4 假设已经引入了
当然作为编码人员,我们都不愿意跟这种“加长”版搅在一起。不过要注意,只有当注释类型只有 一个 成员变量,而且变量名为 迄今为止,您已经有了一个很好的起点,但是要做得完美,还有很长的一段路要走。您可能已经想到,下一步就要为注释设置某个默认值。如果您希望用户指定某些值,但是只有这些值与默认值不同的时候才需要指定其他的值,那么设置默认值就是一种很好的办法。清单 6 用另一个定制注释 —— 来自 清单 4 的 TODO 注释类型的一个全功能版本,示范了这个概念及其实现: 清单 6. 带有默认值的注释类型
清单 6 中的 清单 6 中出现的另一个新特性是注释类型定义了自己的枚举(枚举,即 enumeration,通常也称为 enums,是 Java 5 的另一个新特性。它并没有多么地不同凡响,对注释类型更是如此)。然后,清单 6 使用新定义的枚举作为一个成员变量的类型。 最后,再回到我们的主题 —— 默认值。建立默认值的过程非常琐碎,需要在成员声明的后面添加关键字
清单 8 中使用了同一个注释,但这一次给出了
结束关于注释的讨论之前(至少在本系列文章中),我想简要地讨论一下注释的注释。第 1 部分中所接触的预定义注释类型都有预定义的目的。但是在编写自己的注释类型时,注释类型的目的并不总是显而易见的。除了基本的文档外,可能还要针对某个特定的成员类型或者一组成员类型编写类型。这就要求您为注释类型提供某种元数据,以便编译器保证按照预期的目的使用注释。 当然,首先想到的就是 Java 语言选择的元数据形式 —— 注释。您可以使用 4 种预定义的注释类型(称为 元注释)对您的注释进行注释。我将对这 4 种类型分别进行介绍。 最明显的元注释就是允许何种程序元素具有定义的注释类型。毫不奇怪,这种元注释被称为 Target 。但是在了解如何使用 Target 之前,您还需要认识另一个类,该类被称为 ElementType ,它实际上是一个枚举。这个枚举定义了注释类型可应用的不同程序元素。清单 9 给出了完整的 ElementType 枚举: 清单 9. ElementType 枚举
清单 9 中的枚举值意义很明确,您自己可以分析其应用的目标(通过后面的注解)。使用
现在,Java 编译器将把 下一个要用到的元注释是 Retention 。这个元注释和 Java 编译器处理注释的注释类型的方式有关。编译器有几种不同选择:
这三种选项用
现在可以看出,
如清单 12 所示,这里可以使用简写形式,因为 下一个元注释是 Documented 。这个元注释也非常容易理解,部分原因是 Documented 是一个标记注释。您应该还记得第 1 部分中曾经提到,标记注释没有成员变量。 Documented 表示注释应该出现在类的 Javadoc 中。在默认情况下,注释 不包括在 Javadoc 中,如果花费大量时间注释一个类、详细说明未完成的工作、正确完成了什么或者描述行为,那么您应该记住这一点。
清单 13 说明了
最后一个元注释 Inherited ,可能是最复杂、使用最少、也最容易造成混淆的一个。这就是说,我们简单地看一看就可以了。
首先考虑这样一种情况:假设您通过定制的
添加
现在,您也许已经准备回到 Java 世界为所有的事物编写文档和注释了。这不禁令我回想起人们了解 Javadoc 之后发生的事情。我们都陷入了文档过滥的泥潭,直到有人认识到最好使用 Javadoc 来理清容易混淆的类或者方法。无论用 Javadoc 做了多少文章,也没有人会去看那些易于理解的 getXXX() 和 setXXX() 方法。
注释也可能出现同样的趋势,虽然不一定到那种程度。经常甚至频繁地使用标准注释类型是一种较好的做法。所有的 Java 5 编译器都支持它们,它们的行为也很容易理解。但是,如果要使用定制注释和元注释,那么就很难保证花费很大力气创建的那些类型在您的开发环境之外还有什么意义。因此要慎重。在合理的情况下使用注释,不要荒谬使用。无论如何,注释都是一种很好的工具,可以在开发过程中提供真正的帮助。
|
相关推荐
Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是一种描述数据的数据,它提供了一种安全的方式,使我们可以在不改变程序代码本身的情况下,向编译器或运行时环境提供额外的...
Java注解是一种强大的元数据机制,它允许开发者在代码中添加额外的信息,这些信息可以被编译器、运行时环境或其他工具使用。通过自定义注解,开发者可以创建灵活的框架和库,提高代码的可读性和可维护性。随着Java...
在`annotations学习.md`文件中,可能会包含更多关于注解使用的示例和详细解释,包括如何创建注解、如何在代码中使用它们,以及如何编写注解处理器。`src`目录通常包含项目的源代码,可能有使用注解的实际Android应用...
在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境读取。反射(Reflection)是Java的一个强大特性,允许程序在运行时检查类、接口、字段和方法等...
Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在代码中插入特定的标记,这些标记可以在编译时或运行时被处理器解析,从而实现特定的功能。自定义注解可以用来增强代码的可读性,简化代码处理,以及...
在IT行业中,Java注解(Annotations)是一种元数据,它为程序提供了附加信息,这些信息可以被编译器、IDE或运行时环境用来执行各种任务,包括但不限于代码分析、编译时验证、运行时处理等。这篇名为“通过Java注解...
在Java编程语言中,注解(Annotations)是一种元数据,用于提供有关代码的信息,这些信息可以被编译器或运行时环境使用。自定义注解是扩展Java功能的强大工具,可以用于实现各种目的,如代码生成、编译时检查、运行...
在Android开发中,注解(Annotations)是一种强大的工具,它能帮助我们简化代码,提高代码的可读性和可维护性。Android Annotations库是专门为Android应用设计的一个注解处理框架,它提供了一系列预定义的注解,可以...
在本篇文章中,我们将深入探讨如何在Gradle项目中自定义实现Java注解处理器。 首先,我们需要了解注解处理器的工作原理。Java的注解处理器是在JDK的`javax.annotation.processing`包中定义的,主要由`Processor`...
通过深入研究"java-annotations"项目,我们可以学习到如何设计和实现自己的注解,以及如何在JVM语言中有效地利用注解进行编程。这不仅可以提升我们的编程技能,还能帮助我们更好地理解和利用Java生态系统的丰富工具...
自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,使得开发变得更加简洁高效。随着时间的推移,这种“零...
Java中的注解(Annotations)是元数据的一种形式,用于向编译器、IDE或运行时环境提供关于代码的额外信息。这些信息可以用于代码验证、简化维护、代码生成以及运行时处理。注解不会直接影响程序的执行,但它们可以被...
Hibernate Annotations API 中文文档 前言 1. 创建一个注解项目 1.1. 系统需求 1.2. 系统配置 2. 实体Bean 2.1. 简介 2.2. 用EJB3注解进行映射 2.2.1. 声明实体bean 2.2.1.1. 定义表(Table) 2.2.1.2. 乐观...
Java注解(Annotation)是Java语言的一个重要特性,它为代码提供了一种元数据,用于在编译时或运行时进行处理。注解不会直接影响程序的执行,但可以通过注解处理器来实现特定的功能,例如代码生成、验证、性能监控等...
Java 8是一个重要的Java版本,它引入了许多新特性和改进,其中之一就是重复注解(repeating annotations)。在Java 8之前,尽管可以使用数组类型的注解来实现类似的效果,但这种方式并不直观,降低了代码的可读性。...
《深入解析Java注解(Annotations)与jar包》 在Java编程中,注解(Annotations)扮演着重要的角色,它们为代码提供了元数据,使得编译器、开发工具以及运行时环境能更好地理解和处理代码。本篇文章将围绕"annotations-...
在Java环境中,SCA通过引入特定的注解(Annotations)和API,使得Java开发者能够更方便地参与到服务构件的开发过程中。这些注解和API规范定义了如何声明服务、引用其他服务以及配置服务属性。 1. **注解...
Java注解(Annotation)是Java语言提供的一种元数据机制,用于向编译器或JVM提供额外的信息。这些信息可以用来验证代码、控制代码生成、配置应用等。注解是自Java 5版本引入的特性,它使得程序员可以在源代码中嵌入...
2. **创建注解的Pojo类**:接着,定义一个Java类,并使用JSoup-Annotations的注解来标注字段。比如,如果你要解析一个包含标题、作者和内容的博客文章,可以创建如下类: ```java public class BlogPost { @Id(...