Mit diesem CodeAS3 - Kann ich wissen, ob eine Klasse eine Schnittstelle implementiert (oder eine Unterklasse einer anderen Klasse ist)?
function someFunction(classParam:Class):Boolean
{
// how to know if classParam implements some interface?
}
heißt classParam
mit IEventDispatcher
Schnittstelle Vergleich:
someFunction(EventDispatcher) // returns true
someFunction(Object) // returns false
Ich weiß es nicht mit is
Operator erfolgen. Aber, gibt es einen Weg, es zu tun? Gibt es eine Möglichkeit zu wissen, ob eine Klasse eine Schnittstelle implementiert? (Oder ist eine Unterklasse einer anderen Klasse?)
Mögliche Lösungen:
A. ein Objekt von classParam
Erstellen und Verwenden dieses Objekt is
Operator zu vergleichen mit.
function someFunction(classParam:Class):Boolean
{
return (new classParam()) is IEventDispatcher
}
B. Verwenden describeType()
function someFunction(classParam:Class):Boolean
{
var xml:XML = describeType(classParam)
// found "implementsInterface" value in xml and compare to IEventDispatcher
}
es einen Weg gibt, die NICHT describeType
verwendet oder erstellt einen new
Operator?
Was mich stört ist die Geschwindigkeit von 'describeType'. Ist es nicht langsam? –
Es hängt davon ab, wie viel Sie es verwenden, aber ja, es ist ziemlich langsam. Problem ist, ich glaube nicht, dass es einen anderen Weg gibt, dies zu erreichen. Dieser Artikel könnte Sie interessieren, der Autor hat einen Benchmark erstellt und herausgefunden, dass ein describeType auf UIComponent 5ms auf seinem Computer benötigt: http://faindu.wordpress.com/2010/02/01/actionscript-flex-dependency-injection-performance/ –
Das Erstellen des Objekts dauert also weniger Zeit? Ich werde eine Benchmark dazu machen, um es zu sehen. –