Аргумент моего метода func() должен реализовывать два несвязанных интерфейса IFoo и IBar. Есть ли лучший способ сделать это, чем объявить другой интерфейс только для этой цели, который наследует от IFoo и IBar и использует этот интерфейс в качестве типа аргумента?AS3: Как мне задать аргумент метода для реализации нескольких интерфейсов?
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
Как отмечалось в @maxmc, это должен быть «открытый интерфейс IFooBar extends IFoo, IBar {', а не 'реализует' – Amarghosh