Java注释

Leh*_*ane 111 java glossary annotations

Java中注释的目的是什么?我把这些模糊的想法放在评论和实际代码之间.它们是否在运行时影响程序?

它们的典型用法是什么?

它们是Java独有的吗?是否有C++等价物?

And*_*vig 79

注释主要由检查其他代码的代码使用.它们通常用于在运行时修改(即装饰或包装)现有类以改变其行为.诸如JUnitHibernate之类的框架使用注释来最小化您自己编写以使用框架所需的代码量.

Oracle 在其网站上对Java的概念及其含义进行了很好的解释.


Kon*_*lph 16

此外,它们是Java独有的,是否有C++等价物?

不,但VB和C#具有相同的属性.

它们的用途非常多样化.一个典型的Java示例@Override对代码没有影响,但如果修饰方法实际上没有覆盖另一个方法,编译器可以使用它来生成警告(或错误).同样,方法可以标记为过时.

然后有反思.当您在代码中反映类的类型时,您可以访问属性并根据其中的信息执行操作.我不知道Java中的任何示例,但在.NET中,编译器使用它来生成(de)类的序列化信息,确定结构的内存布局声明从遗留库(以及其他)中导入函数.它们还控制IDE表单设计器的工作方式.

/ EDIT:类的属性与标记接口(如Java中的Serializable)相当.但是,.NET编码指南说不使用标记接口.此外,它们仅适用于类级别,而不适用于方法级别.


Eli*_*ght 13

Anders给出了一个很好的总结,这是一个JUnit注释的例子

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}
Run Code Online (Sandbox Code Playgroud)

这里的@Test注释告诉JUnit该flatfileMissing方法是一个应该执行的测试,并且预期的结果是抛出的IOException.因此,当您运行测试时,将调用此方法,并且测试将根据是否IOException抛出而通过或失败.


pek*_*pek 7

Java还有注释处理工具(apt),不仅可以创建注释,还可以决定这些注释如何对源代码起作用.

是一个介绍.


Sco*_*eld 5

要了解可以使用注释做的一些很酷的事情,请查看我的 JavaBean 注释和注释处理器

它们非常适合生成代码,在构建过程中添加额外的验证,而且我也一直将它们用于错误消息框架(尚未发布 - 需要与老板澄清......)。