延伸AbstractProcessor
时,可能会覆盖init(...)
,但不存在“相反”的方法,将在所有回合处理后调用。Java注释处理:我如何知道一轮是否是最后一个?
这是一个问题:当你有追加每一轮中收集到的信息相同文件,你就永远不能关闭文件,因为你永远不会知道什么时候最后一轮了。所以,该文件永远不会关闭,并保持为空。
使用关闭挂钩也不起作用,挂钩永远不会被调用。
任何想法?
延伸AbstractProcessor
时,可能会覆盖init(...)
,但不存在“相反”的方法,将在所有回合处理后调用。Java注释处理:我如何知道一轮是否是最后一个?
这是一个问题:当你有追加每一轮中收集到的信息相同文件,你就永远不能关闭文件,因为你永远不会知道什么时候最后一轮了。所以,该文件永远不会关闭,并保持为空。
使用关闭挂钩也不起作用,挂钩永远不会被调用。
任何想法?
Processor.process
方法包括类型为RoundEnvironment
的参数。也许RoundEnvironment.processingOver
方法可以有所帮助。
看来,我在处理注释的背景下“轮”的认识是错误的:
如前所述here,
[...]在每一轮中,处理器可以 是要求处理在前一轮产生的源文件和 类文件中的 注释的子集。 第一轮 处理的输入是该工具的运行的初始输入; 处理的输入是该工具运行的初始输入;可以将这些初始输入 视为虚拟第零轮处理的输出。 [...]
因为在我的使用情况下,我要么不生产任何新的类文件,或者我产生他们,但不需要过程他们,应该足够多只是为了“计数”轮次,并且只在第一轮中进行实际工作(并且在结束时进行清理工作,例如关闭文件)。
但其他注释处理程序可能会生成文件,然后由您处理。因此你不应该依赖这个假设。 – 2016-08-31 08:19:36
这似乎是我正在寻找!谢谢! – 2012-03-03 20:18:36