我面临着与类似 StackOverflow 问题所面临的问题类似的问题Way to specify multiple interfaces in Java但它特别适用于http://code.google.com/webtoolkit/articles/mvp中提供的 GWT MVP 示例框架-architecture.html。
在本例中,在 /Contacts/src/com/google/gwt/sample/contacts/client/presenter/ContactsPresenter.java 文件中,界面 Display 包含以下方法:
public interface Display
{
HasClickHandlers getAddButton();
HasClickHandlers getDeleteButton();
HasClickHandlers getList();
...
}
我想在这里创建一个 getSuggestBox() 方法,而不是这些按钮。在我的 Presenter 文件的 bind() 方法中,我想调用
getSuggestBox().addKeyDownHandler({...})
和
getSuggestBox().addSelectionHandler({...})
并为这些创建处理程序。
为此,我的第一个解决方案是创建一个 HasSearchHandlers 接口,如下所示:
public interface HasSearchHandlers extends HasKeyDownHandlers,
HasSelectionHandlers<SuggestOracle.Suggestion>{}
然后尝试使用该方法
HasSearchHandlers getSuggestBox()
然而,到目前为止,这一切都失败了。我不能使用多态性说
private HasSearchHandlers box = new SuggestBox()
在我的 ContactsView 文件版本中实现 getSuggestBox(),我也无法将 SuggestBox 转换为 HasSearchHandlers——我得到了 ClassCastException。JRE 知道 HasSearchHandlers 是一个空接口,所以我不明白为什么 SuggestBox 必须显式实现 HasSearchHandlers 才能使这种转换工作。类 SuggestBox 实现了 HasSearchHandlers 接口中的所有内容;这还不够吗?
在这篇文章的第一个链接中作为替代方案提供的通用接口给我带来了类似的困难,因为它做了同样的事情而不称它为“HasSearchHandlers”。鉴于这个问题,最好的设计步骤是什么?我应该如何在 GWT MVP 框架中实现和创建“getSuggestBox()-like”机制?