С этим кодом
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
оператор?
Я не вижу другого способа добиться того, что вы пытаетесь сделать, кроме как с помощью 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);
Возможно, примеры кода в этой статье дадут ответ: Проверки времени выполнения для абстрактных классов и методов в ActionScript 3.0