我的方法func()的参数必须实现两个不相关的接口IFoo和IBar。有没有更好的方法来执行此操作,而不是仅为此目的声明另一个接口,该接口继承自IFoo和IBar并使用该接口作为参数类型?
public interface IFooBar extends IFoo, IBar {
}
public function func(arg:IFooBar):void {
}
我正在为Flash Player 9开发。
我正在尝试做的具体细节:
我正在编写一个小型库,旨在帮助我开发Flash游戏。为了帮助调试和验证游戏结果,库要求用户将游戏分成以下组件:
所有这些组件都会生成事件(称为“消息”,不会将它们与Flash事件混淆)。类Engine
启动组件并运行主循环。
为了使组件尽可能通用Engine
,只需要实现IMessageDispatcher
和ITickable
。我想编写只有IMessageDispatcher
或仅ITickable
的类。我还有一个通用的MessageDispatcher
来实现我的组件可能会扩展的IMessageDispatcher
。
原始问题涉及如何声明如下方法:
Engine.setGameController(controller: ITickable & IMessageDispatcher):void
答案 0 :(得分:1)
声明扩展两个(或所有)所需接口的接口是正确的方法。我想不出更好的方法。
答案 1 :(得分:1)
有一个接口扩展2个不相关的接口只是为了你可以“正确”键入一个函数/方法的参数看起来像一个代码气味。你可以逃脱它,但我认为它可能是一个设计问题的症状。
但是,我可能错了,因为我对你的特定问题一无所知。我假设IFoo和IBar都不相关,可能不是这样。也许如果你更多地描述你的问题,这些接口代表什么以及这个方法如何处理实现两个接口的对象,其他人可以建议你的设计的替代品(如果这是必要的)。但是,作为一般的经验法则,如果你只是为了让编译器保持高兴,你就有可能做错了。