AS3动态创建Vector
很久没有写博客了,已经近乎荒废的程度了.不过从现在起还是要坚持写博客了,很多东西做了测试,没有记录下来,很容易就能忘记的.忘记在哪里看到有人说想动态创建Vector只是苦于语法上不允许,不过还是能够绕开语法检查的
// 请不要复制该代码,该代码不可用
var myClass:Class;
var v:Vector.<myClass> = new Vector.<myClass>();
上面的代码会报错”1046: 找不到类型,或者它不是编译时常数: Vector。"
Vector.<ClassName>
的类名不允许是一个变量, 必须是真正的类型名称才行,所以这样就不能动态创建Vector了.
功夫不负有心人,漫天梨花般的思考后,终于发现可以用反射实现动态创建Vector.
反射法创建Vector
/**
* 获取一个动态Vector.<myclass>
* @param myClass
* @param appDomain myClass所在的应用程序域,如果null则为当前应用程序域
* @return 一个动态Vector, null为myClass不存在
*/
function getVector(myClass:Class, appDomain:ApplicationDomain = null):*
{
// 先获取元素类名
var className:String = getQualifiedClassName(myClass);
// 拼接成Vector类名
var vectorName:String = "__AS3__.vec.Vector.<" + className + ">";
appDomain ||= ApplicationDomain.currentDomain;
if(appDomain.hasDefinition(vectorName))
{
return appDomain.getDefinition(vectorName);
}
// 该类不存在
return null;
}
如果在当前应用程序域里则好办,如果在其他应用程序域里就需要将应用程序域传递过来.
当然也可以使用类的完全限定名来动态获取一个Vector,注意一定要在该类已经被加载到flash player后才能获取.
编后语
这样的需求可能会用来模拟C++的模板吧,但是比起模板是弱了很多,代码提示就完全没有了.
» 转载请注明来源:www.litefeel.com » 《AS3动态创建Vector》
» 本文链接地址:https://www.litefeel.com/as3-dynamic-create-vector/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/as3-dynamic-create-vector/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
alert("xxx");
没有特别的做手机主题.还是这个地址.
博客手机访问地址是什么?
你好。我来看你了!
没有白看,还是有收获的,好!
网站新手多多关照
还好,有点味道
@Easily
呵呵,就是 t = t || a; 的简写版
@lite3
这样写好像更简洁,以前没有用过,可能我自己会这样写
appDomain = appDomain ? appDomain : ApplicationDomain.currentDomain;
其实这个有点像lua中变量的初始化
t = t or {}
@Easily
呵呵,文档上都有的,||=就是一个运算符, 如果左边为转到boolean为flash就将右边的赋值给左边,否则还将左边的赋值给左边.要多看看帮助文档才好的,呵呵,我收藏页面里还有好多东西呢,欢迎查看.
appDomain ||= ApplicationDomain.currentDomain;
这句很有意思,第一次知道这样的用法,博主能介绍一下这个用法吗
ok,帅