为什么 GWT 使用代码生成器而不是注释处理器?

Why does GWT use code generators rather than annotation processors?

GWT 使用带有 GWT.create() 命令的代码生成器来生成实现。这提供了一种在 GWT 中做事的声明方式,但我不明白为什么它不像大多数 java 那样使用注释处理器来完成。this article 是最初让我想到的。看起来它会简化构建并让您看到编译时错误并且与常规 java 更加兼容。这是一个附带问题,但我是唯一认为 GWT 应该支持反射的人吗?我听说这会使代码变慢但仍然如此。在某些情况下不值得吗?

GWT 是在 Java language/platform (Java 1.4) 中甚至还没有注释之前创建的,这就是原因。

虽然新的开发倾向于倾向于注释处理,但它最终将作为 SuperDevMode 重新编译的一部分得到支持(您目前必须 运行 您的注释处理器并让 SDM 选择 – 修改 – 生成的源);一个例子是 Dagger 2.
然而,我不认为这种方法适用于当前在 GWT 中使用生成器的所有情况。

至于GWT.create(),对于替换为 延迟绑定的情况,它仍然是needed/useful ].


至于反射,这与 "slowness" 无关,它与需要嵌入到生成的 JS 代码中以支持 运行 时间反射的元数据有关。尽管在编译时一切都是已知的,但在 运行 时几乎不需要反射;您通常可以使用编译时生成的代码来替代 运行 时间反射。所以不,这不值得。