如何列出特定包中的(可能大量的)类?(AS3)



我在一个包中有x个类。"com.trevorboyle。我不断添加更多的类(这些类可能都是静态的,并且可能都扩展同一个类)。

我希望创建所有这些类的下拉列表,最好不必自己手动创建数组。

一旦从列表中选择了一个类,我将能够使用getDefinitionByName来返回它,因为此时我将知道它的名称。

问题是,我认为AS3不支持列出特定包中的所有类,是否存在处理此问题的设计模式?

有两种方法:

首先,传统的clean as3实现:

创建一个类,在类初始化时注册你感兴趣的所有类(当它第一次在代码中使用时)。

像这样:

package   {
import flash.utils.getQualifiedClassName;
public class ClassesRegister {
    private static const PACKAGE_RESOLVER_PATTERN   : RegExp = /^(?P<packageName>[a-zA-Z_.]+)::/;
    private static const registeredClasses : Object = { };
    public static function registerClass ( clazz : Class ) : void {
        var packageName : String = PACKAGE_RESOLVER_PATTERN.exec( getQualifiedClassName( clazz ) ).packageName || "";

        if ( !registeredClasses[ packageName ] ) {
            registeredClasses[ packageName ] = [];
        }
        registeredClasses[ packageName ].push( clazz );
    }
    public static function getClassesOfPackage ( packageName : String ) : Array {
        return registeredClasses[ packageName ].concat();
    }
}

}

初始化时注册的类:

package   {
public class SomeClass {
    // Add class to register in static initializer
    {
        ClassesRegister.registerClass( SomeClass );
    }
    /**
     * Class constructor
     */
    public function SomeClass () {
    }
}

}

还有另一种方法,我自己没有测试过,但很有希望:使用as3commons字节码库

属性definitionNames中的ByteCodeTypeCache类存储了在扫描的所有字节码中遇到的所有完全限定定义名称。你可以遍历这个列表,取你需要的东西。当然,你必须确保你在运行时需要的所有类都被编译成字节码(你必须在某处初始化这些类或使用as3编译器指令)。

相关内容

  • 没有找到相关文章

最新更新