在什么情况下注解处理器的process() 方法应该返回false?

后端开发 2026-07-08

Processor documentation 表示 process 的实现可能返回 false,以表示处理器未声明任何注解(大概在当前轮次上):

如果 false 被返回,注解接口未被声明,后续处理器可能会被要求去处理它们

我理解这个。

我并不百分之百清楚的是:返回 false 的一个好、具体的用例是什么?日志记录或打印是不是唯一这样的情况?在“现实世界”中,我认为 true 应该几乎总是被返回?

解决方案

只要还没完成,本质上就是这样。

常见情形1:把工作推迟到下一轮

returning false means your AP will be called again in the next round. If there is a next round.

返回false意味着你的AP将在下一轮再次被调用。如果存在下一轮的话。

你可能想要:

  • 生成一些额外的源文件。
  • 你希望将任何进一步的操作推迟到下一轮,因为你希望新创建的源文件能够参与进来。例如,当你在浏览类型层次结构时,你希望你刚创建的源文件中定义的类型被包含在内。
  • 生成的源文件中没有你在 getSupportedAnnotations 中声明的注解,或者在下一轮也更方便把触发源文件中的注解交给你处理。

如果你 return true;,那么就会出现下一轮非最终轮(因为你生成了新的源文件),你将被调用(因为一旦AP被调用,它将在所有后续轮次中被调用),但未来轮次中传递给你的源元素清单将不再包含你在此之前通过 return true; 获得的任何内容。如果你希望在未来轮次中继续接收带有你注解的元素,你需要 return false;(并且很可能在后续的某一轮你会 return true;)。

常见情形2:多个AP / 支持AP

也有可能你想知道某些注解的存在,但你并不声称自己是“处理它们”的那个实体。你只是对它们的存在感兴趣。

这并不常见——通常,去“处理”你并不“拥有”的注解(它们的包名不以你的实体/组织开头)是一种怪异的想法;但任何具有公开API且提供保证的处理器,意味着你可以选择编写一个“辅助AP”,它想要知道但不声称拥有处理权。这意味着在 getSupportedAnnotations 列表中可能存在多个注解处理器,它们之间存在重叠的注解。

这两种情况都相当罕见,因此正确使用 return false; 本身也相当罕见。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章