Аргумент к моему методу func () должен реализовывать два несвязанных интерфейса IFoo и IBar. Есть ли лучший способ сделать это, чем объявить другой интерфейс только для этой цели, который наследуется от IFoo и IBar, и использовать этот интерфейс в качестве типа аргумента?
public interface IFooBar extends IFoo, IBar {
}
public function func(arg:IFooBar):void {
}
Я разрабатываю для Flash Player 9.
Особенности того, что я пытаюсь сделать:
Я пишу небольшую библиотеку классов, которые призваны помочь мне в разработке Flash-игр. Чтобы помочь в отладке и проверке результатов игры, библиотека требует, чтобы пользователь разбил игру на следующие компоненты:
- rawInputProducer: создает события ввода устройства из событий флэш-ввода, сохраненных событий предыдущего сеанса или другого источника
- rawInputProcessor: прослушивает ввод устройства и из них выдает пользовательские команды
- gameController: слушает пользовательские команды и обновляет состояние игры
- gameView: прослушивает изменения состояния игры из gameController и обновляет сцену
Все эти компоненты генерируют события (называемые «сообщениями», чтобы не путать их с флэш-событиями). Класс Engine
запускает компоненты и запускает основной цикл.
Чтобы компоненты были настолько универсальными, насколько это возможно, Engine
требует только, чтобы они реализовали IMessageDispatcher
и ITickable
. Я хочу написать классы, которые имеют IMessageDispatcher
или ITickable
. У меня также есть универсальный MessageDispatcher
, который реализует IMessageDispatcher
, что мои компоненты, вероятно, будут расширяться.
Исходный вопрос касается того, как я могу объявить метод, подобный следующему:
Engine.setGameController(controller: ITickable & IMessageDispatcher):void