Я столкнулся с проблемой, аналогичной проблеме, с которой столкнулся аналогичный вопрос StackOverflow Способ указать несколько интерфейсов в Java, но поскольку это конкретно относится к платформе примера GWT MVP, представленной в http://code.google.com/webtoolkit/articles/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 (). В методе bind () в моем файле Presenter я хотел бы вызвать
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». В свете этой проблемы, что лучше всего сделать при проектировании? Как мне реализовать и создать механизм, подобный getSuggestBox (), в структуре GWT MVP?