Vì vậy, có vẻ như câu trả lời là không có cách nào để ngầm cast một Vector của một loại để loại siêu hợp lệ. Nó phải được thực hiện một cách rõ ràng với Vector toàn cầu. <> chức năng.
Vì vậy, tôi thực tế vấn đề là một kết hợp của các vấn đề :)
Đó là đúng để sử dụng Vector. như một tài liệu tham khảo tổng quát để một Vector, nhưng, nó không thể được thực hiện như thế này:
var spriteList:Vector.<Sprite> = new Vector.<Sprite>()
var genericList:Vector.<Object> = new Vector.<Object>()
genericList = spriteList // this will cause a type casting error
Việc chuyển nhượng phải được thực hiện bằng cách sử dụng Vector() chức năng toàn cầu/đúc như vậy:
var spriteList:Vector.<Sprite> = new Vector.<Sprite>()
var genericList:Vector.<Object> = new Vector.<Object>()
genericList = Vector.<Object>(spriteList)
Đó là một trường hợp đơn giản của tôi không đọc số documentation.
Dưới đây là một số mã thử nghiệm, tôi mong đợi Vector. để đúc hoàn toàn với 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++]
}
}
Nguồn
2009-03-01 10:35:50
Đó là một câu hỏi hay. Uncharted lãnh thổ! – Iain