Как определить, является ли ссылка на класс интерфейсом? - PullRequest
5 голосов
/ 10 октября 2011

Как и в Java, я хочу знать, объявлена ​​ли моя ссылка как интерфейс.

function foo(classRef:Class){

if(classRef.isInterface(){
  //something
}

}

Ответы [ 2 ]

4 голосов
/ 10 октября 2011

Вы можете использовать AS3 Commons Reflect , чтобы получить эту информацию.Ваша функция будет выглядеть примерно так:

function foo(classRef:Class)
{
    var type:Type = Type.forClass(classRef);

    if (type.isInterface)
    {
        //something
    }
}
3 голосов
/ 10 октября 2011

Мои собственные исследования.Если класс является интерфейсом, то в описании XML в узле <factory> он никогда не будет содержать <constructor> и <extendsClass>.Итак, это функция:

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);
}

Тест:

trace(isInterface(IEventDispatcher));
trace(isInterface(Button));
trace(isInterface(int));
trace(isInterface(XML));
trace(isInterface(String));

Выход:

[trace] true
[trace] false
[trace] false
[trace] false
[trace] false
...