2009-09-03 15 views
7

Estoy anulando la función addItem() de una colección de matriz y me gustaría detectar si el elemento agregado implementa una interfaz particular.¿Cómo puedo saber si una instancia implementa una interfaz en ActionScript 3.0

Anteriormente utilicé el operador is para detectar el tipo de clase, pero ahora que estoy usando una interfaz para las clases, prefiero probar para ver si el objeto implementa la interfaz.

Espero que pueda intentar y lanzar el objeto como la interfaz y ver si no es null. ¿Es esta la mejor manera de hacerlo?

También podría simplemente crear un nuevo addFunction() que solo acepta objetos del tipo de interfaz.

Respuesta

13

Todavía puede usar es para probar una interfaz.

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

Gracias Joel, fui bastante flojo de mi parte, pero quería saber la forma correcta de hacerlo, en lugar de encontrar algo que funcionara pero que podría haber sido una mala práctica. – robmcm

+0

¡Buena elección! ¿Puedes agregar "en AS3" al final del título? –

3

Para añadir a la respuesta de Joel: si desea obtener más información sobre las interfaces implementa una clase (y sus subclases, clases para padres, etc.), la biblioteca AS3Commons tiene una clase ClassUtils que tiene una serie de conveniencia métodos.

Cuestiones relacionadas