GWT generate-with 和 replace-with 混合

GWT generate-with and replace-with mix

我今天遇到一个奇怪的问题,我的 gwt.xml 文件中有 generate-with 和 replace-with 选项。我解释一下:

首先,我有两个 classes "A" 和 "B" 以及一个名为 "I" 和 "B extends A implements I" 的接口。我还有一个 "IGenerator" 发电机

在我的 gwt.xml 中,我有这样的东西:

<generate-with class = "IGenerator" >
  <when-type-assignable class = "I" />
</generate-with>

<replace-with class = "B">
 <when-type-is class = "A">
</replace-with>

问题是我的对象 A 应该是 B_Generated 对象。 我不得不说,当 B 不扩展 A 时,它可以工作,而当 B 不实现 I 时,它可以工作......但是在这种情况下,它不起作用。

希望你能帮我解决这些问题...

先谢谢大家

-- 更多信息 --

在我的项目中:

A:PlaceManager 乙:Project1_PlaceManager 丙:Project2_PlaceManager I : AnnotatedClass -- 表示 class 包含一些必须用代码片段替换的注释 --

我的 PlaceManager 负责管理场所、活动和诸如此类的所有工作。 B 和 C PlaceManager 有自己的 Places,这些 Places 由注释声明,例如:

@Place
MyPlaceA placeA; // this part is replaced by a creation snippet

@Place
MyPlaceB placeB; // this part is replaced by a creation snippet

所以问题是 运行 一个或另一个项目,必须将 PlaceManager 替换为好的,并且必须生成新的 class 来替换我的代码片段。

注意:这个描述很简单,项目要复杂得多...

我可能是错的,但根据我所知道的和正在使用的情况,您可以选择使用生成器或使用替代品,但不能同时选择两者 class。我真的不明白这一点。

为什么要生成一个 class 来替换另一个?

http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsDeferred.html

没有延迟绑定规则的链接:使用第一个匹配的规则,并且不根据规则评估结果。这意味着你不能说 GWT.create(A.class) 会 运行 你的 IGenerator 期望 class 实现 I,而 A 没有实现。

您必须创建一个 AFactory(默认情况下会简单地执行 new A()),您可以用 BFactory 替换(这会执行 GWT.create(B.class),触发您的 IGenerator) 并更改您的代码以使用该间接寻址;或者创建一个可以匹配 A 并使用 B 作为输入(而不是收到的 A)调用您的 IGenerator 的生成器。

也就是说,我认为您(有点)滥用 延迟绑定,而应该使用某种依赖注入(可以绑定 GWT.create(B.class) 当需要 A 时)。