- 浏览: 90872 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 编译器都支持它们,它们的行为也很容易理解。但是,如果要使用定制注释和元注释,那么就很难保证花费很大力气创建的那些类型在您的开发环境之外还有什么意义。因此要慎重。在合理的情况下使用注释,不要荒谬使用。无论如何,注释都是一种很好的工具,可以在开发过程中提供真正的帮助。
|
相关推荐
学习注解,android实例使用自定义注解以及简单的注解处理器
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. 乐观...
如果您想使用使用graphql-java-annotations创建graphql spring引导服务器的工具,则可以查看库。 目录 入门 (Gradle语法) dependencies { compile " io.github.graphql-java:graphql-java-annotations:8.3 " } ...
这个一个自定义注解实现给注解传递伪动态参数的小案例,可以在此自定义注解的基础上来记录接口的调用记录。
主要介绍了Java8新特性之重复注解(repeating annotations)浅析,这个新特性只是修改了程序的可读性,是比较小的一个改动,需要的朋友可以参考下
类、方法、变量、参数、包都可以被注解,可用来将信息元数据与程序元素进行关联 An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and ...
hibernate_annotations.rar,用于Java开发中Hibernate的注解
java8流源码ls-注解 ls-annotation 是一个 java 字节码反编译器; 它提取并打印使用 java 注释的类、方法和字段的定义。 这个工具的目的是让带有相互依赖的注解的声明变得有意义,这种依赖的一个例子是 Spring Boot ...
Java JSOUP 标注方案,不用自己费劲解析了
使用hibernate注解,必须要使用库hibernate-commons-annotations,hibernate-core,hibernate-jpa,ejb3-persistence,javassist等
给公司内部培训的PPT,JAVA技术,注解,给公司内部培训的PPT,JAVA技术,注解
对于Annotation,是Java5的新特性,JDK5引入了Metedata(元数据)很容易的就能够调用Annotations.Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉编译器禁止一些特殊的错误。
这个包是注释用的,没啥实际用处,直接在工程里面删除掉这个,工程可以运行正常。但是下次重启,红色的感叹号又回来了。为了彻底解决这个问题,最好的办法就是满足他,下载一个annotations放到应该的地方
注解 (annotations) 列表 @SpringBootApplication : 包含了 @ComponentScan、@Configuration 和 @EnableAutoConfiguration 注解。 其中 @ComponentScan 让 spring Boot 扫描到 Configuration 类并把它加入到程序上...
Otus Spring框架开发人员学生...基于Java和注解的Spring配置使用基于Java和注释的配置重 为应用程序添加属性文件国际化(i18n)测试应用程序的输出消息和问题如何使项目运行从GitHub克隆存储库: git clone git@github....
slf4j-1.6.zip hibernate-annotations-3.4.0.GA.zip
无安普Java Annotations 和 Annotation Processer 用于确保覆盖方法。 ##注释|注释|概述| |---|---|---| |@克隆| 如果这个注解被添加到一个类中,clone 方法应该在类和子类中被覆盖。| |@必须覆盖| 如果将此注释添加...
Java的注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,标记可以加在包,类,属性,方法,本地变量上。然后你可以写一个注解处理器去解析处理这些注解(人称编译时注解),也可以在程序...
技术关键词:集合框架(Collections)、缓存(Caching)、原生类型支持(Primitives Support)、并发库(Concurrency Libraries)、常见注解(Common Annotations)、字符串处理(String Processing)、I/O操作(I/O...
该项目仅用于学习java8,请随意Fork,更改 #博文地址 所有博客的源代码都能在这里 src/main/java/java8sample Chapter 1: 通往lambda之路_语法篇 Chapter 2: 深入解析默认方法 Chapter 3: 解开lambda最强作用的神秘...