在GWT中使用泛型是否有好处

时间:2012-06-19 07:08:09

标签: gwt

通过在GWT中使用java泛型,GWT编译器是否有任何好处。这有助于创建更小或更有效的JavaScript代码,或者它与在Java中使用它们具有相同的好处。

复杂性来自于使用GWT,MVP和泛型..为了实现,泛型正确的接口看起来如下:

public interface ViewInterface<P extends PresenterInterface<? extends ViewInterface<P>>> {
}
public interface PresenterInterface<V extends ViewInterface<? extends PresenterInterface<V>>> {
}

上面的代码是否会改进javascript编译器结果,或者如果我刚刚使用了以下代码,它会没有效果:

public interface ViewInterface<P extends PresenterInterface<?>> {
}
public interface PresenterInterface<V extends ViewInterface<?>> {
}               

如果生成的javascript的性能没有差异,我宁愿选择第二个实现。 (减少锅炉)......

希望这是有道理的......

1 个答案:

答案 0 :(得分:1)

作为Google I/O 2009 presentation Ray Ryan在使用GWT RPC时提到使用the command pattern design。您可以查看演示文稿。有一个名为GAD a.k.a GWT Action Dispatcher的图书馆,其中的想法来自Rayan在演示文稿中的建议。 GAD由5个使用泛型的组件(类和接口)组成。没有泛型,客户端代码以及服务器代码中的很多类型转换将在客户端和服务器之间共享Actions和Responses实现。我上面提到的5个组件是:

1-

public interface Action<T extends Response> extends Serializable {

}

2-

public interface ActionHandler<K extends Action, T extends Response> {

  /**
   * Handles the provided action and retuns response of it.
   *
   * @param action the action to be handled
   * @return the response to be returned
   */
  T handle(K action);

}

3-

public interface ActionDispatcher {

  /**
   * Dispatches the provided action to a proper handler that is responsible for handling of that action.
   * <p/> To may dispatch the incomming action a proper handler needs to be bound
   * to the {@link com.evo.gad.dispatch.ActionHandlerRepository} to may the dispatch method dispatch the
   * incomming request to it.
   *    
   * @param action the action to be handled
   * @param <T> a generic response type
   * @return response from the provided execution
   * @throws ActionHandlerNotBoundException is thrown in cases where no handler has been bound to handle that action
   */
  <T extends Response> T dispatch(Action<T> action) throws ActionHandlerNotBoundException;

} 

4-

public interface ActionHandlerRepository {
  ActionHandler getActionHandler(Class<? extends Action> aClass);
}

当动作传递给动作调度程序时,动作调度程序调用ActionHandlerRepository并要求它获取正确的ActionHandler,然后调用方法句柄。 你可以找到GAD here

换句话说,好处是完全相同的。更少的实例和类型转换。 希望这很有帮助。祝你好运。