是否可以使用Java注释来实现与预处理器类似的功能

时间:2009-09-23 07:51:42

标签: java annotations preprocessor

是否可以创建一个预处理器,类似于C中提供并由Antenna提供的功能。我们可以使用APT tool来实现此功能吗?是否有类似主题的文章或链接?

2 个答案:

答案 0 :(得分:2)

注释并不是一种转换代码的工具;他们只是为代码添加元数据。例如,您无法使用注释进行条件编译。

正如Sun's tutorial on annotations所说:

  

注释提供有关不属于程序本身的程序的数据。它们对它们注释的代码的操作没有直接影响。

Wikipedia说:

  

编译Java源代码时,注释可以由称为注释处理器的编译器插件处理。处理器可以生成信息性消息或创建其他Java源文件或资源,而这些文件或资源又可以编译和处理,但处理器不能修改带注释的代码本身。

因此,注释处理器插件无法为您提供C预处理器具有的所有功能。

答案 1 :(得分:2)

您可以使用注释处理框架执行编译时任务。它没有预处理器那么强大,因为你无法做到这样的事情:

@RunOnlyOn(OS.Mac) public void someMethod() { ... }

注释处理器的一些好用例是:

  • 从带注释的类创建映射文件,例如创建一个hibernate映射文件;
  • 创建具有特定注释的类的索引,例如从测试类的源文件夹创建testng xml文件;
  • 强制执行通常不可用的编译时约束,例如: having a no-arg constructor

请注意,从Java 6开始不再需要APT,因为所有正确声明的注释处理器都参与编译。

相关问题