Вопрос сводится к "возможно ли иметь? "или шаблон дизайна, который решит мою проблему ниже.
Иерархия того, над чем я работаю, может быть обобщена следующим образом:
Dispatcher
- Controller
- Main View Component
- Optional Mini Controller
- Optional View Component
Каждый компонент здесь имеетреферат, который выполняет большую часть серверной части, и каждый конкретный класс просто заполняет некоторые пробелы.
Меня беспокоит следующее:
Определение:
Controller<T extends AbstractWhatever, U> {
T abstractMainView;
AbstractMiniController abstractMiniController;
}
В действии:
Controller<ConcreteMainView, UnderlyingObjectType> {
abstractMainView.ConcreteMethod; // works
abstractMiniController.ConcreteMethod; // does not work
}
Поскольку главный контроллер имеет общий T
для основного вида, основной вид объявляется как сказано T
, и когда я делаю свой конкретный главный контроллер, я даюэто конкретный класс для T
, теперь он знает все методы моего основного представления.
Но так как необязательный контроллер / представление не имеет конкретного класса, заданного в качестве параметра типа, я должен сделатькуча приведений:
Controller<MainView, Type> {
MainView.doStuff();
((ConcreteOptionalController) COP).doStuff();
((ConcreteOptionalController) COP).doSomeMoreStuff();
((ConcreteOptionalController) COP).doAllTheStuffs();
}
Дело в том, что я не могу дать контроллеру параметр типа:
Controller<MainView, Type, OptionalController>
Потому что порой мне нечего туда положить.Я просто застрял с бесконечными километрами и состояниямиили есть способ сделать эту работу более приятной?