【发布时间】:2011-01-07 03:38:26
【问题描述】:
感谢How and where are Annotations used in Java?,我了解类注释的目的。如in this blog post 和§7.4.1 of the Java Language Specification 所述,包注释的目的是什么?
为什么要将元数据与包相关联?你能做什么?
【问题讨论】:
标签: java annotations
感谢How and where are Annotations used in Java?,我了解类注释的目的。如in this blog post 和§7.4.1 of the Java Language Specification 所述,包注释的目的是什么?
为什么要将元数据与包相关联?你能做什么?
【问题讨论】:
标签: java annotations
【讨论】:
我想@Deprecated 是有道理的。如果整个包是由非 Java 源的某个工具生成的,则可能类似于@Generated。或者 @Internal 如果此包不是公共 API 的一部分。
也许 OSGi 工具(您需要在其中声明包的版本以及所依赖的包)也可以利用这一点。
有人在野外见过吗?
【讨论】:
我能想到的两个原因:
【讨论】:
Class.getAnnotations()时的结果非常不同。
例如,JAXB 允许通常用于类型的most annotations 同样很好地应用于包。这种情况下的含义是为该包中的所有类指定默认值。
例如,如果您希望包中通过 getter/setter 公开的所有类的所有属性都映射到 XML 中,您可以在每个类上指定 @XmlAccessorType(XMLAccessType.PROPERTY)或只需在包。
【讨论】:
这不是真正的目的,但我将它们用作一种解决方法,以避免重新编译 package-info.java 文件。
问题是 javac(和 Ant 任务 <javac>)如果只有文档(它们存在的原因)和 package bla; 语句,则不会为 package-info.java 创建类文件,并且ant 任务会重新编译没有(或较旧的)对应.class 文件的每个文件。
在那里添加一个虚拟注释(如SuppressWarnings)会产生package-info.class 的效果,因此文件在再次更改之前不会重新编译。
(Ant 1.8.0 通过创建一个空的 package-info.class 解决了这个问题,即使没有注释,但我在这里使用的是旧的 ant。)
【讨论】:
测试元数据——即围绕测试包(单元测试或其他)的元数据。您可以将适合于包级别的各种测试元数据归于,例如:功能、所有者、版本、错误/问题等。这些可以在类或方法级别进行细化,但具有包级别的定义或默认值为简洁起见可能很方便。我已经使用了这种方法的一种变体(在使用注释之前)。
对于相同类型的通用代码元数据可以提出类似的论点:特性、所有权、缺陷、历史信息等。
【讨论】: