actionscript-3 - 在 Actionscript 3.0 中读取包下的所有类或读取具有相同元数据的类

标签 actionscript-3 class metadata package introspection

我正在做一个涉及自省(introspection)的 Actionscript 3.0 项目。我想知道是否有办法在给定的包结构中获取所有类。
例如假设有三个 as3 类:
com.example.test.classOne
com.example.test.classTwo
com.example.test.classThree

我想能够说

  getClassesUnderPackageName("com.example.test"); 

然后回来
  "com.example.test::classOne"
  "com.example.test::classTwo"
  "com.example.test::classThree". 

有没有办法做到这一点?

如果这是不可能的,有没有办法读取具有相同元数据的类?

例如。如果所有提到的类都定义了相同的元数据 [MetadataName(type="example")],有没有办法说
   getClassesWithSameMetadata("MetadataName");

然后回来
   "com.example.test::classOne"
   "com.example.test::classTwo"
   "com.example.test::classThree". 

谢谢你。

最佳答案

您可以使用 flash.utils.describeType返回包含此信息的 XML 数据。它在基类上的工作方式不同,例如 flash.display.Sprite ,但是对于自定义类/目录,您可以编写如下内容:

package branchA.branchB.branchC
{
//Imports
import flash.utils.describeType;

//Class
public class Test
    {
    //Constructor
    public function Test()
        {
        trace(describeType(this).@name);
        }
    }
}

//OUTPUT:  branchA.branchB.branchC::Test

如果你想返回基类,你可以这样写:
package
{
//Imports
import flash.display.Sprite;
import flash.utils.describeType;

//Class
public class Test extends Sprite
    {
    //Constructor
    public function Test()
        {
        trace(describeType(this).@base);
        }
    }
}

//OUTPUT:  flash.display::Sprite

通过解析 describeType 返回的 XML 数据,您可以获得许多其他有用的信息。

更新:

为了通过 describeType() 检索它们的信息,类对象不需要先被实例化。您可以构建一个公共(public)静态函数(或其他),它接受您的类对象数组并返回包含所需 describeType 数据的字符串数组。

像这样的东西:
package
{
import flash.utils.describeType;

final public class Describe
    {
    public static function packageNames(classObjects:Array):Vector.<String>
        {
        var names:Vector.<String> = new Vector.<String>();

        for each    (var classObject in classObjects)
                    names.push(describeType(classObject.@name.toString()));

        return names;
        }
    }
}

然后从程序中的任何位置,您可以传递所有类的数组,如下所示:
var names:Vector.<String> = Describe.packageNames(new Array(classOne, classTwo, classThree));
trace(names);

//Output:
//com.example.test::classOne
//com.example.test::classTwo
//com.example.test::classThree

关于actionscript-3 - 在 Actionscript 3.0 中读取包下的所有类或读取具有相同元数据的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400761/

相关文章:

javascript - 在浏览器的新实例中打开页面

android - 如何将声音保存为铃声/通知?

C++ 函数参数和类

MySQL 与 XML 的标记机制

linux - 如何以编程方式或通过命令行 (linux) 设置歌曲的 "Album Artist"

xml - 更改 AS3 中 XML 对象的属性值

flash - as3isolib 的替代品?

python - 每当修改其他实例属性时,自动更新某些 "private"属性

python - 如何使用循环访问嵌套列表中的对象

metadata - Markdown 元数据格式