Я столкнулся с проблемой, аналогичной проблеме, с которой сталкивался аналогичный вопрос 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?