2009-09-03 8 views
7

Nadpisuję funkcję addItem() kolekcji tablic i chciałbym wykryć, czy dodany element implementuje określony interfejs.W jaki sposób stwierdzić, czy instancja implementuje interfejs w języku ActionScript 3.0

Poprzednio użyłem operatora, is, aby wykryć typ klasy, ale teraz, gdy używam interfejsu dla klas, wolę przetestować, czy obiekt implementuje interfejs.

Sądzę, że mógłbym po prostu spróbować rzucić obiekt jako interfejs i sprawdzić, czy nie jest to null. Czy to najlepszy sposób na zrobienie tego?

Mogę też po prostu utworzyć nowy addFunction(), który akceptuje tylko obiekty typu interfejsu.

Odpowiedz

13

Nadal można użyć jest, aby przetestować interfejs.

<?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

Dzięki Joel był raczej leniwy, ale chciałem poznać właściwą drogę, zamiast znaleźć coś, co zadziałało, ale mogło być złym ćwiczeniem. – robmcm

+0

Dobry wybór! Czy możesz dodać "w AS3" na końcu tytułu? –

3

Aby dodać do odpowiedzi Joela: jeśli chcesz uzyskać więcej informacji na temat interfejsów a narzędzia klasy (i jej podklasy, zajęcia rodzicielskie itp), biblioteka AS3Commons ma ClassUtils klasę, która posiada wiele wygody metody.