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
时)。
我今天遇到一个奇怪的问题,我的 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
时)。