我必须在gwt.create中使用类的参数构造函数,但是GWT仅调用默认构造函数。我当时想用呼叫新类(参数列表)代替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());
}
在这里,我想使用productSelettortile类的参数构造函数。我该怎么使用。
任何帮助将不胜感激。我可能不好解释我当前的问题,但是如果您有任何疑问要理解这个问题,请随时。
我将使用没有GWT.create()
可以创建的参数的帮助人类。该辅助类可以具有不同的实现 - 与您的原始类(带有参数)相同。现在,辅助类的每个实现都可以创建原始类的适当实例。
让我们假设您需要每个用户代理的不同实现。在<module>.gwt.xml
中,您将拥有此(请参阅文档):
<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
方法。一旦得到这个想法,您就可以选择最适合您的方法。