由于How and where are Annotations used in Java?,我理解了类注释的目的。如in this blog post和§7.4.1 of the Java Language Specification所描述的那样,包注释的目的是什么?
为什么要将元数据与包关联?你能做些什么?
答案 0 :(得分:41)
答案 1 :(得分:7)
我认为@Deprecated
会有意义。如果整个包是由来自非Java源的某个工具生成的,那么可能类似于@Generated
。如果此软件包不属于公共API,则为@Internal
。
也许OSGi工具(您需要声明包的版本以及您依赖的包)也可以使用它。
有没有人见过野外的人?
答案 2 :(得分:4)
我能想到的两个原因:
答案 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)
测试元数据 - 即围绕测试包的元数据(单元测试或其他)。您可以归档适用于包级别的各种测试元数据,例如:功能,所有者,版本,错误/问题等。这些可以在类或方法级别进行优化,但具有包级别定义或默认值为简洁起见可能很方便。我已经使用了这种方法的一种变体(在注释的好处之前)。
可以围绕相同类型的事物对通用代码元数据进行类似的论证:功能,所有权,缺陷,历史信息等。