我必须在GWT.create中使用我的类的参数化构造函数,但GWT只调用默认构造函数。我想通过调用new Class(参数列表)来替换GWT.create的调用。这是在GWT延迟绑定中编码的正确方法。
代码如下:
public interface ProductSelectorMetaFactory extends BeanFactory.MetaFactory {
BeanFactory<ProductSelectorTile> getProductSelectorTileFactory();
}
public CustomTileGrid(DataSource cardViewDataSource, ProductSelectorTile tileType, String fieldState,
List<DetailViewerField> list) {
setDataSource(cardViewDataSource);
setAutoFetchData(true);
GWT.create(ProductSelectorMetaFactory.class);
setTileConstructor(tileType.getClass().getName());
}
这里我想使用ProductSelectorTile类的参数构造函数。我该怎么用呢。
感谢任何帮助。 我可能不善于解释我目前的问题,但如果您对此问题有任何疑问,请随意。
答案 0 :(得分:0)
我会使用一个没有可由GWT.create()
创建的参数的辅助类。辅助类可以有不同的实现 - 与原始类(带参数)相同。现在,helper类的每个实现都可以创建原始类的正确实例。
假设您需要为每个用户代理实现不同的实现。在<module>.gwt.xml
中你会有这个(见documentation):
<replace-with class="<module.path>.MyClassHelperGecko">
<when-type-is class="<module.path>.MyClassHelper" />
<when-property-is name="user.agent" value="gecko1_8" />
</replace-with>
<replace-with class="<module.path>.MyClassHelperSafari">
<when-type-is class="<module.path>.MyClassHelper" />
<when-property-is name="user.agent" value="safari" />
</replace-with>
...
助手类及其实现:
public class MyClassHelper {
MyClassInterface getInstance(String param) {
return null;
};
}
public class MyClassHelperGecko extends MyClassHelper {
@Override
public MyClassInterface getInstance(String param) {
return new MyClassGecko(param);
}
}
public class MyClassHelperSafari extends MyClassHelper {
@Override
public MyClassInterface getInstance(String param) {
return new MyClassSafari(param);
}
}
...
最后实现了基类:
public interface MyClassInterface {
// ...
}
public class MyClassGecko implements MyClassInterface {
public MyClassGecko(String param) {
Window.alert("Gecko implementation; param = " + param);
// ...
}
}
public class MyClassSafari implements MyClassInterface {
public MyClassSafari(String param) {
Window.alert("Safari implementation; param = " + param);
// ...
}
}
...
像这样使用它,你会看到不同用户代理的不同警报:
MyClassHelper helper = GWT.create(MyClassHelper.class);
helper.getInstance("abc");
这是一般的Deferred Binding Using Replacement
解决方案。还有Deferred Binding using Generators
方法。一旦你明白了,你就可以选择最适合自己的方法。