【问题标题】:GWT generate-with and replace-with mixGWT 生成和替换混合
【发布时间】:2015-07-25 00:00:46
【问题描述】:

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

首先,我有两个类“A”和“B”以及一个名为“I”的接口,其中“B 扩展 A 实现 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 -- 表示该类包含一些注解,必须用代码sn-ps替换 --

我的 PlaceManager 负责管理地点、活动和类似的东西。 B 和 C PlaceManager 有自己的 Places,它们由如下注释声明:

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

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

所以问题是,运行一个或另一个项目,PlaceManager 必须替换为好的,并且必须生成新的类来替换我的 sn-ps。

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

【问题讨论】:

    标签: gwt replacewith


    【解决方案1】:

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

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

    也就是说,我认为你(有点)滥用延迟绑定,而应该使用某种依赖注入(当 A 是预期)。

    【讨论】:

    • 谢谢托马斯。在等待答案时,这就是我所做的,就像我在尝试之前所做的那样。感谢您的旅游回答。关于您对依赖注入的建议,我曾经使用 GIN/GUICE bu 进行我工作的投影,这还不够,这就是 IGenerator 的起源。谢谢!
    【解决方案2】:

    我可能是错的,但从我所知道的和正在使用的情况来看,您选择使用生成器或使用替换,但不能同时用于同一类。我真的不明白这一点。

    为什么要生成一个类来替换它?

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

    【讨论】:

    • 嗨,我认为您理解我的问题的方式有误。可能是我描述错了......在我的应用程序中,我有以下行 A a = GWT.create(A.class)。替换为应用于它,我收到一个 B 对象。所以我有类似 A a = GWT.create(B.class);这就是我首先想要的……现在,我有了我的 B 类,而这个 B 类实现了 I。所以,生成器应该在它上面工作。我会有类似 A a = GWT.create(B_IGenerated.class);这是我真正需要的。我会编辑我的帖子,因为我的描述太长了... ;) 但是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    相关资源
    最近更新 更多