包注释有什么意义?

时间:2010-01-20 06:25:26

标签: java annotations

由于How and where are Annotations used in Java?,我理解了类注释的目的。如in this blog post§7.4.1 of the Java Language Specification所描述的那样,包注释的目的是什么?

为什么要将元数据与包关联?你能做些什么?

6 个答案:

答案 0 :(得分:41)

  1. bnd tool(和maven-bundle-plugin)使用包注释。在package-info.java中放置@Version和@Export注释可以生成OSGi元数据。
  2. javadoc使用包注释。
  3. JAXB使用包级注释for example来指定Java类型到包的XML模式类型的映射。包注释也用在JBoss的xml绑定中。
  4. Struts 2 Convention插件使用an annotation为包中的所有操作指定默认拦截器。
  5. 有一些包级Hibernate Annotations。可以找到这些注释用法的示例here

答案 1 :(得分:7)

我认为@Deprecated会有意义。如果整个包是由来自非Java源的某个工具生成的,那么可能类似于@Generated。如果此软件包不属于公共API,则为@Internal

也许OSGi工具(您需要声明包的版本以及您依赖的包)也可以使用它。

有没有人见过野外的人?

答案 2 :(得分:4)

我能想到的两个原因:

  • 注释特殊包以让某些方面(例如使用AspectJ)在其中编织类以用于特定功能。
  • 注释某些工具要读取的包,例如源,元数据或其他类型的资源生成。

答案 3 :(得分:2)

例如,JAXB允许通常在类型上使用的most annotations同样适用于包。在这种情况下的含义是指定该包中所有类的默认值。

例如,如果您希望通过getter / setter公开的包中所有类的所有属性都以XML格式映射,则可以在每个类上指定@XmlAccessorType(XMLAccessType.PROPERTY),只需指定它在包装上。

答案 4 :(得分:1)

这不是真正的目的,但我使用它们作为一种解决方法,以避免重新编译package-info.java文件。

问题是如果只有文档(它们存在的原因)和{{javac(和Ant任务<javac>)没有为package-info.java创建类文件。 1}}语句,并且ant任务重新编译没有(或更旧)对应的package bla;文件的每个文件。

在那里添加虚拟注释(如.class)会产生SuppressWarnings,因此在重新更改之前不会重新编译文件。

(Ant 1.8.0通过创建一个空的package-info.class解决了这个问题,即使没有注释,但我在这里使用较旧的package-info.class。)

答案 5 :(得分:0)

测试元数据 - 即围绕测试包的元数据(单元测试或其他)。您可以归档适用于包级别的各种测试元数据,例如:功能,所有者,版本,错误/问题等。这些可以在类或方法级别进行优化,但具有包级别定义或默认值为简洁起见可能很方便。我已经使用了这种方法的一种变体(在注释的好处之前)。

可以围绕相同类型的事物对通用代码元数据进行类似的论证:功能,所有权,缺陷,历史信息等。