2009-09-03 12 views
7

Sto sovrascrivendo la funzione addItem() di una raccolta di array e vorrei rilevare se l'elemento aggiunto implementa un'interfaccia particolare.Come posso sapere se un'istanza implementa un'interfaccia in ActionScript 3.0

In precedenza ho utilizzato l'operatore, is per rilevare il tipo di classe, ma ora che sto utilizzando un'interfaccia per le classi, preferisco testare per vedere se l'oggetto implementa l'interfaccia.

Mi aspetto che potrei provare a lanciare l'oggetto come interfaccia e vedere se non è null. È questo il modo migliore per farlo?

Potrei anche creare un nuovo addFunction() che accetta solo oggetti del tipo di interfaccia.

risposta

13

È ancora possibile utilizzare è per verificare un'interfaccia.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768" creationComplete="application1_creationCompleteHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 
      public var test:TestInterface = new TestInterface() //implements ITestInterface 


      protected function application1_creationCompleteHandler(event:FlexEvent):void 
      { 
       trace(test is ITestInterface); //true 
      } 

     ]]> 
    </fx:Script> 
</s:Application> 
+0

Grazie Joel, ero piuttosto pigro da parte mia, ma volevo sapere il modo giusto per farlo, piuttosto che trovare qualcosa che funzionasse ma che poteva essere una cattiva pratica. – robmcm

+0

Buona scelta! Puoi aggiungere "in AS3" alla fine del titolo? –

3

Per aggiungere alla risposta di Joel: se volete più informazioni sulle interfacce a strumenti di classe (e le sue sottoclassi, classi genitore, ecc), la biblioteca AS3Commons ha una classe ClassUtils che ha un certo numero di convenienza metodi.

Problemi correlati