我目前对Vector
课感到困惑。
我给TypedClass解析器写了一个漂亮的XML
。工作精美,没有错。 UNTIL 一位同事发现我们收到了Vector.<Number> to Vector.<*>
的转化错误。
我测试过的Vector
Vector.<*>
每个Vector.<Sprite>
。
Vector.<String>
,Vector.<Point>
,Vector.<Boolean>
,Vector.<TextField>
,Vector.<CustomObject>
,<type name="__AS3__.vec::Vector.<String>" base="__AS3__.vec::Vector.<*>" isDynamic="true" isFinal="false" isStatic="false">
<extendsClass type="__AS3__.vec::Vector.<*>"/>
<extendsClass type="Object"/>
<accessor name="length" access="readwrite" type="uint" declaredBy="__AS3__.vec::Vector.<*>"/>
<accessor name="fixed" access="readwrite" type="Boolean" declaredBy="__AS3__.vec::Vector.<*>"/>
</type>
等等所有这些。
Vector.<Number>
但是当我在Vector.<uint>
,Vector.<int>
和<type name="__AS3__.vec::Vector.<Number>" base="Object" isDynamic="true" isFinal="true" isStatic="false">
<extendsClass type="Object"/>
<constructor>
<parameter index="1" type="uint" optional="true"/>
<parameter index="2" type="Boolean" optional="true"/>
</constructor>
<accessor name="length" access="readwrite" type="uint" declaredBy="__AS3__.vec::Vector.<Number>"/>
<accessor name="fixed" access="readwrite" type="Boolean" declaredBy="__AS3__.vec::Vector.<Number>"/>
</type>
上使用describeType时。
Vector.<Number>
现在我已经单独考虑了这3个向量,因为即使uint和int也没有像我预期的那样扩展{{1}}。 我的解析功能再次适用于所有类型。但是我的困惑是为什么会出现这种情况,为什么我找不到关于这个问题的任何文件。
答案 0 :(得分:1)
如果我没记错的话,Vector.<Number>
,Vector.<int>
和Vector.<uint>
(但不是Boolean
或String
,奇怪的是) 尽可能快,因此Flash Player会将它们编写为单独的类。
正如您所注意到的,所有其他Vector类都扩展Vector.<*>
并且类型检查的执行方式略有不同(这就是为什么使用int,uint和Number更快地使用Vector,但是对于所有其他类,数组的速度稍快一些)
无论如何,那是为什么。至于如何解决这个问题,我担心你必须将你的矢量作为无类型传递给你想要使用它的函数:
public function addItem(vector:*, item:*)
{ vector.push(item); }