2

我的方法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状态变化并更新阶段

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

为了允许组件尽可能通用Engine只需要它们实现IMessageDispatcherITickable。我将要编写只有IMessageDispatcher或只有ITickable的课程。我也有一个通用MessageDispatcher,实现IMessageDispatcher,我的组件可能会扩展。

原来的问题对于我怎样才能声明的方法如下所示:

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

正如@maxmc所指出的那样,它应该是'public interface IFooBar extends IFoo,IBar {',''implements' – Amarghosh 2010-05-04 09:22:15

回答

1

声明扩展所需的接口的两个(或全部)是这样做的正确方法的接口。我想不出更好的办法。

+0

你的意思是“扩展”,而不是“implements” – maxmc 2010-05-04 09:05:03

+0

@maxmc ya,修正。我想我_implemented_ OP的错误:) – Amarghosh 2010-05-04 09:21:00

1

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

虽然我可能是错的,因为我对你的特定问题一无所知。我假设IFoo和IBar都不相关,可能并非如此。也许如果你描述一些更多的问题,这些接口代表什么以及所讨论的方法如何处理实现这两个接口的对象,其他人可以为你的设计提供替代方案(如果这恰好是必要的话)。但是,作为一般的经验法则,如果你只是为了保持编译器的快乐而做这件事,那么你有可能做错了事情。

+0

+1我同意代码的气味... – OXMO456 2010-05-05 03:40:41

+0

添加了我想要按照你的建议做的细节 – Anders 2010-05-05 11:03:52

相关问题