您好,我需要制作一个 VectorIterator,所以我需要接受任何类型的 Vector。我目前正在尝试将类型定义为 * ,如下所示:
var collection:Vector.<*> = new Vector<*>()
但编译器抱怨该类型“不是编译时常量”。我知道 Vector 类存在一个错误,其中错误报告将错误的类型报告为缺失,例如:
var collection:Vector.<Sprite> = new Vector.<Sprite>()
如果没有导入 Sprite,编译器会抱怨找不到 Vector 类。我想知道这是否相关?
所以看起来答案是没有办法将类型的 Vector 隐式转换为有效的超类型。它必须使用全局 Vector. 函数显式执行。
So my actual问题是一个混合问题:)
使用Vector是正确的。作为对另一个 Vector 的通用引用,但是,它不能像这样执行:
var spriteList:Vector.<Sprite> = new Vector.<Sprite>()
var genericList:Vector.<Object> = new Vector.<Object>()
genericList = spriteList // this will cause a type casting error
应使用全局 Vector() 函数/强制转换来执行分配,如下所示:
var spriteList:Vector.<Sprite> = new Vector.<Sprite>()
var genericList:Vector.<Object> = new Vector.<Object>()
genericList = Vector.<Object>(spriteList)
这是一个简单的例子,我没有阅读文档 http://livedocs.adobe.com/flex/gumbo/langref/package.html#Vector().
下面是一些测试代码,我期望的是 Vector。隐式转换为 Vector.。
public class VectorTest extends Sprite
{
public function VectorTest()
{
// works, due to <*> being strictly the same type as the collection in VectorContainer
var collection:Vector.<*> = new Vector.<String>()
// compiler complains about implicit conversion of <String> to <*>
var collection:Vector.<String> = new Vector.<String>()
collection.push("One")
collection.push("Two")
collection.push("Three")
for each (var eachNumber:String in collection)
{
trace("eachNumber: " + eachNumber)
}
var vectorContainer:VectorContainer = new VectorContainer(collection)
while(vectorContainer.hasNext())
{
trace(vectorContainer.next)
}
}
}
public class VectorContainer
{
private var _collection:Vector.<*>
private var _index:int = 0
public function VectorContainer(collection:Vector.<*>)
{
_collection = collection
}
public function hasNext():Boolean
{
return _index < _collection.length
}
public function get next():*
{
return _collection[_index++]
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)