AS3 - Я могу знать, реализует ли класс интерфейс (или подкласс другого класса)?

С этим кодом

function someFunction(classParam:Class):Boolean
{
    // how to know if classParam implements some interface?
}

т.е. Сравнение classParam с IEventDispatcher интерфейс:

someFunction(EventDispatcher) // returns true
someFunction(Object) // returns false

Я знаю, что это не может быть, покончили is оператор. Но, есть ли способ сделать это? Существует ли способ знать, реализует ли класс некоторый интерфейс? (или подкласс другого класса?)

Возможные решения:

A. Создание объекта classParam и использование того объекта сравнить использование is оператор.

function someFunction(classParam:Class):Boolean
{
    return (new classParam()) is IEventDispatcher
}

B. Использование describeType()

function someFunction(classParam:Class):Boolean
{
    var xml:XML = describeType(classParam)
    // found "implementsInterface" value in xml and compare to IEventDispatcher
}

Существует путь, который НЕ ИСПОЛЬЗУЕТ describeType или создает a new оператор?

9
задан Lucas Gabriel Sánchez 25 March 2010 в 18:27
поделиться

2 ответа

Я не вижу другого способа добиться того, что вы пытаетесь сделать, кроме как с помощью describeType .
Он был создан для этой цели, почему вы не хотите его использовать?

Изменить:
На самом деле для этого требуется всего 2 строки:

var classDescription:XML = describeType(classParam);
return (classDescription.factory.implementsInterface.(@type == getQualifiedClassName(IEventDispatcher)).length() != 0);

... или только в одном, если вас это беспокоит:

return (describeType(classParam).factory.implementsInterface.(@type == getQualifiedClassName(IEventDispatcher)).length() != 0);
6
ответ дан 4 December 2019 в 23:05
поделиться
1
ответ дан 4 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: