AS3:我如何需要一个方法参数来实现多个接口?

时间:2010-05-04 07:34:57

标签: actionscript-3 interface types multiple-inheritance arguments

我的方法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收听游戏状态更改并更新舞台

所有这些组件都会生成事件(称为“消息”,不会将它们与Flash事件混淆)。类Engine启动组件并运行主循环。

为了使组件尽可能通用Engine,只需要实现IMessageDispatcherITickable。我想编写只有IMessageDispatcher或仅ITickable的类。我还有一个通用的MessageDispatcher来实现我的组件可能会扩展的IMessageDispatcher

原始问题涉及如何声明如下方法:

Engine.setGameController(controller: ITickable & IMessageDispatcher):void

2 个答案:

答案 0 :(得分:1)

声明扩展两个(或所有)所需接口的接口是正确的方法。我想不出更好的方法。

答案 1 :(得分:1)

有一个接口扩展2个不相关的接口只是为了你可以“正确”键入一个函数/方法的参数看起来像一个代码气味。你可以逃脱它,但我认为它可能是一个设计问题的症状。

但是,我可能错了,因为我对你的特定问题一无所知。我假设IFoo和IBar都不相关,可能不是这样。

也许如果你更多地描述你的问题,这些接口代表什么以及这个方法如何处理实现两个接口的对象,其他人可以建议你的设计的替代品(如果这是必要的)。但是,作为一般的经验法则,如果你只是为了让编译器保持高兴,你就有可能做错了。