SmartGWT.Create与新操作员替代方案



我必须在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方法。一旦得到这个想法,您就可以选择最适合您的方法。

最新更新