Необязательный общий параметр или способ борьбы с ошибками типа - PullRequest
0 голосов
/ 08 октября 2018

Вопрос сводится к "возможно ли иметь? "или шаблон дизайна, который решит мою проблему ниже.

Иерархия того, над чем я работаю, может быть обобщена следующим образом:

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>

Потому что порой мне нечего туда положить.Я просто застрял с бесконечными километрами и состояниямиили есть способ сделать эту работу более приятной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...