2009-08-14 9 views
0

Est-ce que quelque chose comme ça est possible dans Actionscript?Implémentation de l'interface Inline dans Actionscript

Java:

URLFetcherFactory.setCreator(
    new IURLFetcherCreator() { 
     public IURLFetcher create() { 
      return new URLFetcher(); 
     } 
    } 
); 

Actionscript:

? 

Je me demandais à ce sujet et ont été incapables de trouver quelque chose qui indique qu'il est possible. Figuré si était possible, je serais en mesure de trouver une réponse ici. Merci! Roches Stackoverflow!

Répondre

0

Vous ne pouvez pas créer une instance d'une interface. Vous pouvez toutefois créer une classe d'usine:

public class URLFetcherCreator : IURLFetcherCreator { 
    private var _cls : Class; 

    public URLFetcherCreator(Class cls) { 
     this._cls = cls; 
    } 

    public function create() : IURLFetcher 
    { 
     return new cls(); 
    } 
} 

Alternativement, le changement setCreator d'accepter une fonction qui renvoie un IURLFetcher:

URLFetcherFactory.setCreator(
    function() : IURLFetcher { 
     return new URLFetcher(); 
    } 
); 
+0

Ouais, il est dommage que AS3 ne supporte pas les délégués fortement typés. Lambdas serait encore mieux. –

0

Essayez ceci:

URLFetcherFactory.setCreator(
    new IURLFetcherCreator() { 
      public function create():IURLFetcher { 
        return new URLFetcher(); 
      } 
    } 
); 
0

Vous ne pouvez pas utiliser les classes internes anonymes en AS3. Pour les cas spéciaux comme les rappels, vous pouvez utiliser la fonction à la place des classes internes anonymes.

Java:

interface Callback { 
    void done(String info); 
} 
class Service { 
    void process(Callback callback); 
} 
... 
myService.process(new Callback() { 
    void done(String info) { 
      // trace(info); 
    } 
} 

AS3:

class Service { 
    public function process(callback:Function):void; 
} 
... 
myService.process(function(info:String):void { 
    trace(info); 
});