使用 Object 或 * 作为 Vector 的类型不提供通用功能(如 Java 中的 List)。见证:
public static function someGenericVectorUtil (value:Vector.<*>) :void {
// do stuff to/with the Vector
}
var someVector:Vector.<Number>;
someGenericVectorUtil(someVector); // compile-time implicit coercion error
所以,也许我们重新定义了实用方法来接受一个数组。但是没有简单的方法可以将进入实用程序的向量转换为数组,也没有简单的方法在之后将它们打包回来,导致代码如下:
public static function someGenericArrayUtil (value:Array) :void {
// do stuff to/with the formerly-known-as-Vector
}
var someVector:Vector.<Number>;
var tempArray:Array = new Array(someVector.length);
for (var i:uint=0; i<someVector.length; i++) {
tempArray[i] = someVector[i];
}
someGenericVectorUtil(tempArray);
someVector = Vector.<Number>([tempArray]);
不用说,这非常可怕。好的,让我们将 Vector-Array-Vector 废话移到实用程序中:
public static function vectorToArray (Vector.<*>) :Array {
// oh wait....that Vector.<*> param is useless,
// as demonstrated earlier.
}
有什么办法可以解决这个烂摊子吗?或者当我认为我可能需要通过通用实用程序运行 Vectors 时,我应该停止使用它们吗?(显然,也不是一个真正的选择......)