Tak jak w Javie, chcę wiedzieć, czy moje odwołanie jest zadeklarowane jako interfejs.Jak rozpoznać, czy odwołanie do klasy jest interfejsem?
function foo(classRef:Class){
if(classRef.isInterface(){
//something
}
}
Tak jak w Javie, chcę wiedzieć, czy moje odwołanie jest zadeklarowane jako interfejs.Jak rozpoznać, czy odwołanie do klasy jest interfejsem?
function foo(classRef:Class){
if(classRef.isInterface(){
//something
}
}
Można użyć AS3 Commons Reflect aby uzyskać te informacje. Twoja funkcja będzie wtedy wyglądać tak:
function foo(classRef:Class)
{
var type:Type = Type.forClass(classRef);
if (type.isInterface)
{
//something
}
}
Moje własne zwiedzanie. Jeśli klasa jest interfejsem, to w opisie XML w węźle <factory>
nigdy nie będzie zawierać <constructor>
i <extendsClass>
. Tak, jest to funkcja:
private function isInterface(type : *):Boolean {
var description : XML = describeType(type);
return (description.factory[0].descendants("constructor").length() == 0
&& description.factory[0].descendants("extendsClass").length() == 0);
}
Test:
trace(isInterface(IEventDispatcher));
trace(isInterface(Button));
trace(isInterface(int));
trace(isInterface(XML));
trace(isInterface(String));
wyjściowa:
[trace] true
[trace] false
[trace] false
[trace] false
[trace] false
dzięki, nie wiedziałem o tym ładnym biblioteki –
dzięki za dzielenie się informacjami na temat tej biblioteki. – Mady