GWT generate-with和replace-with mix

时间:2015-07-24 13:24:49

标签: gwt replacewith

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

首先,我有两个类“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 B:Project1_PlaceManager C:Project2_PlaceManager I:AnnotatedClass - 表示该类包含一些必须由代码片段替换的注释 -

我的PlaceManager完成了管理场所,活动和类似内容的所有工作。 B和C PlaceManager有自己的位置,通过注释声明:

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

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

因此,运行一个或另一个项目,PlaceManager必须被好的项目替换,并且必须生成新的类来替换我的片段。

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

2 个答案:

答案 0 :(得分:1)

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

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

那就是说,我认为你(某种程度上)滥用延迟绑定,而应该使用某种依赖注入(可以在{{A时绑定GWT.create(B.class)预期1}}。

答案 1 :(得分:0)

我可能错了,但是从我所知道并且正在使用你选择使用发电机或使用替代品而不是两者都用于同一类。我真的不明白这一点。

为什么要生成一个类,让它被另一个替换?

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