AS3 - 我可以知道一个类是否实现了一个接口(或者是另一个类的子类)?

时间:2010-03-25 18:05:14

标签: actionscript-3 oop class

使用此代码

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

即。将classParamIEventDispatcher界面进行比较:

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

我知道is运算符无法完成。但是,有没有办法做到这一点?有没有办法知道一个类是否实现了一些接口? (或者是另一个类的子类?)

可能的解决方案:

一个。创建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或创建new运营商?

4 个答案:

答案 0 :(得分:6)

除非使用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);

答案 1 :(得分:1)

也许本文中的代码示例将提供答案:Runtime Checks for Abstract Classes and Methods in ActionScript 3.0

答案 2 :(得分:0)

添加'Zed-K'回复。我最终不需要.factory部分了。以下是检查类是否正在使用和接口的测试示例。 '_instance'是被测试的课程。

[Test]
public function testInstanceShouldBeIUser():void
{
    var classDescription:XML = describeType( _instance );
    var type:String = getQualifiedClassName(IUser);
    var xmlList:XMLList = classDescription.implementsInterface.(@type == type);
    assertTrue("expected IUser", xmlList.length() != 0 );
}

答案 3 :(得分:0)

可能不是。顺便说一句,还有describeTypeJSON,女巫比describeType快5倍。