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

相關問題