Java注解
Java中注释的目的是什么?我对它们的理解很模糊,介于注释和实际代码之间。它们在运行时会影响程序吗?
它们的典型用法是什么?
它们是Java独有的吗?是否有等效的C ++?
解决方案
回答
Also, are they unique to Java, is there a C++ equivalent?
不,但是VB和Chave属性是同一回事。
它们的用法是多种多样的。一个典型的Java例子,@Override对代码没有影响,但是如果修饰的方法实际上没有覆盖另一个方法,则编译器可以使用它@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ............ ///////// Override生成警告(或者错误)。同样,方法可以标记为过时。
然后有反思。当我们在代码中反映类的类型时,我们可以访问属性并根据在其中找到的信息进行操作。我不知道Java中的任何示例,但在.NET中,编译器使用它来生成类的(反序列化)信息,确定结构的内存布局并声明从旧版库(以及其他库)中导入的函数。它们还控制IDE表单设计器的工作方式。
/ EDIT:类上的属性与标记接口具有可比性(如Java中的Serializable)。但是,.NET编码指南说不要使用标签接口。而且,它们仅在类级别上起作用,而不在方法级别上起作用。
回答
批注主要由检查其他代码的代码使用。它们通常用于在运行时修改(即修饰或者包装)现有类以更改其行为。诸如JUnit和Hibernate之类的框架使用批注来最大程度地减少我们编写自己才能使用这些框架的代码量。
Oracle在其站点上用Java很好地解释了该概念及其含义。
回答
Anders给出了很好的总结,这是一个JUnit注释的示例
@Test(expected=IOException.class) public void flatfileMissing() throws IOException { readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat"); }
这里的@Test注释告诉JUnit,flatfileMissing方法是应该执行的测试,预期结果是抛出的IOException。因此,在运行测试时,将根据是否抛出IOException调用此方法,并且测试将通过或者失败。
回答
Java还具有注释处理工具(apt),我们不仅可以在其中创建注释,还可以决定这些注释在源代码上的工作方式。
这里是介绍。
回答
要查看我们可以使用Annotations做的一些有趣的事情,请查看我的JavaBean注释和注释处理器。
它们非常适合生成代码,在构建过程中添加额外的验证,并且我还一直在将它们用于错误消息框架(尚未发布-需要与上司联系...)。