Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT生成和替换为混合_Gwt_Replacewith - Fatal编程技术网

GWT生成和替换为混合

GWT生成和替换为混合,gwt,replacewith,Gwt,Replacewith,今天我遇到了一个奇怪的问题,在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-w

今天我遇到了一个奇怪的问题,在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>
所以问题是运行一个或另一个项目时,PlaceManager必须被好的项目替换,并且必须生成新的类来替换我的代码片段


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

我可能错了,但从我所知道的和正在使用的情况来看,您可以选择使用生成器,也可以使用替换项,但不能对同一类同时使用这两个项。我真的不明白这一点

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


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

您必须创建一个
a工厂
(默认情况下只需创建一个
新的a()
),用
B工厂
(创建一个
GWT.create(B.class)
,触发您的
IGenerator
)替换它,并将代码更改为使用该间接寻址;或者创建一个生成器,该生成器可以匹配
a
,并将
B
作为输入(而不是接收到的
a
)调用到您的
IGenerator


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

嗨,我想您理解我的问题的方式是错误的。也许我把它描述错了。。。在我的应用程序中,我有以下行A=GWT.create(A.class)。替换为应用于它,我接收一个B对象。所以我有一个类似于A=GWT.create(B.class)的东西;这就是我首先想要的。。。现在,我有了我的B类,这个B类实现了I。因此,生成器应该可以处理它。我将有类似于A=GWT.create(B_IGenerated.class)的东西;这是我真正需要的。我将编辑我的帖子,因为我的描述太长了…;)但是thxs!谢谢你,托马斯。在等待答案的时候,我就是这么做的,就像我在尝试之前做的那样。谢谢你的回答。关于你关于依赖注入的建议,我曾经使用GIN/GUICE-bu进行我的投影,这是不够的,这就是IGenerator的起源。谢谢
@Place
MyPlaceA placeA; // this part is replaced by a creation snippet

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