我面臨類似的問題,類似的StackOverflow問題Way to specify multiple interfaces in Java所面臨的問題,但它特別適用於http://code.google.com/webtoolkit/articles/mvp-architecture.html中提供的GWT MVP示例框架。在我的GWT MVP中使用除HasClickHandlers之外的東西
在這個例子中,在文件/Contacts/src/com/google/gwt/sample/contacts/client/presenter/ContactsPresenter.java,接口顯示包含下列方法:
public interface Display
{
HasClickHandlers getAddButton();
HasClickHandlers getDeleteButton();
HasClickHandlers getList();
...
}
相反這些按鈕中,我想在這裏做一個getSuggestBox()方法。在我的演示文件中的bind()方法,我想援引
getSuggestBox().addKeyDownHandler({...})
和
getSuggestBox().addSelectionHandler({...})
,併爲這些處理程序。
要做到這一點,我的第一個解決方案是創建一個HasSearchHandlers接口,看起來像這樣:
public interface HasSearchHandlers extends HasKeyDownHandlers,
HasSelectionHandlers<SuggestOracle.Suggestion>{}
,然後嘗試使用方法
HasSearchHandlers getSuggestBox()
然而,這已失敗至今。我不能在我的版本的ContactsView文件的使用多態,說
private HasSearchHandlers box = new SuggestBox()
實施getSuggestBox(),我不能投了SuggestBox成HasSearchHandlers要麼 - 我得到一個ClassCastException。 JRE知道HasSearchHandlers是一個空的接口,所以我不明白爲什麼SuggestBox必須顯式實現HasSearchHandlers才能使這個工程生效。 SuggestBox類實現了HasSearchHandlers接口中的所有內容;這不夠嗎?
在這篇文章的第一個鏈接中作爲替代方案呈現的通用接口給了我類似的難度,因爲它沒有將其稱爲「HasSearchHandlers」而做了同樣的事情。鑑於這個問題,最好的設計步驟是什麼?我應該如何在GWT MVP框架中實現並創建一個「getSuggestBox() - like」機制?