可以通过调用 Vector.<T>() 构造函数创建 Vector 实例。还可以通过调用 Vector.<T>() 全局函数创建 Vector。该函数将指定对象转换为 Vector 实例。ActionScript 没有等效于 Array 文本语法的 Vector。
只要声明 Vector 变量(Vector 方法参数或方法返回类型也一样),就需要指定 Vector 变量的基本类型。在通过调用 Vector.<T>() 构造函数创建 Vector 实例时也要指定基本类型。换句话说,只要在 ActionScript 中使用术语 Vector,就需要指定基本类型。
可以使用 type 参数语法指定 Vector 的基本类型。在代码中,type 参数紧跟单词 Vector。它包括一个点 (.),然后是由尖括号 (<>) 括起来的基类名称,如此示例中所示:
var v:Vector.<String>;
v = new Vector.<String>();
在此示例的第一行内容中,变量 v 声明为 Vector.<String> 实例。换句话说,它表示只能包含 String 实例的索引数组。第二行调用 Vector() 构造函数创建一个具有相同 Vector 类型的实例(也就是其中所有元素都是 String 对象的 Vector)。该示例将该对象分配给 v。
使用 Vector.<T>() 构造函数
如果使用不带任何参数的 Vector.<T>() 构造函数,则该函数会创建一个空的 Vector 实例。可以通过检查 Vector 的 length 属性来测试它是否为空。例如,下面的代码调用不带任何参数的 Vector.<T>() 构造函数:
var names:Vector.<String> = new Vector.<String>();
trace(names.length); // output: 0
如果您预先知道 Vector 最初需要多少元素,则可以预定义 Vector 中的元素数。若要使用特定数量的元素创建 Vector,请将元素数作为第一个参数(length 参数)进行传递。因为 Vector 元素不能为空,所以会使用具有基本类型的实例填充这些元素。如果基本类型是允许使用 null 值的引用类型,则所有元素都包含 null。否则,所有元素都包含该类的默认值。例如,uint 变量不能为 null。因此,在下面的代码清单中,使用七个元素创建名为 ages 的 Vector,其中每个元素都包含值 0:
var ages:Vector.<uint> = new Vector.<uint>(7);
trace(ages); // output: 0,0,0,0,0,0,0
最后,还可以使用 Vector.<T>() 构造函数创建固定长度 Vector,方法是将 true 作为第二个参数(fixed 参数)进行传递。在这种情况下,将使用指定的元素数创建 Vector,且元素数不可更改。但是请注意,仍然可以更改固定长度 Vector 的元素值。
与 Array 类不同,您不能将值列表传递给 Vector.<T>() 构造函数来指定 Vector 的初始值。
使用 Vector.<T>() 全局函数
除了 Vector.<T>() 构造函数之外,还可以使用 Vector.<T>() 全局函数创建 Vector 对象。Vector.<T>() 全局函数是一个转换函数。当调用 Vector.<T>() 全局函数时,需指定该方法返回的 Vector 的基本类型。可将单个索引数组(Array 或 Vector 实例)作为参数进行传递。该方法随后返回具有指定基本类型的 Vector,其中包含源数组参数中的值。下面的代码清单演示了用于调用 Vector.<T>() 全局函数的语法:
var friends:Vector.<String> = Vector.<String>(["Bob", "Larry", "Sarah"]);
Vector.<T>() 全局函数在两个级别上执行数据类型转换。首先,当 Array 实例传递给该函数时,会返回 Vector 实例。其次,无论源数组是 Array 还是 Vector 实例,该函数都会试图将源数组的元素转换为基本类型的值。该转换使用标准 ActionScript 数据类型转换规则。例如,下面的代码清单将源 Array 中的 String 值转换为结果 Vector 中的整数。第一个值(“1.5”)的小数部分被截断,非数字的第三个值(“Waffles”)在结果中转换为 0:
var numbers:Vector.<int> = Vector.<int>("1.5", "17", "Waffles"]);
trace(numbers); // output: 1,17,0
如果无法转换任何源元素,则会发生错误。
当代码调用 Vector.<T>() 全局函数时,如果源数组中的某个元素是指定基本类型的子类的实例,则该元素会添加到结果 Vector 中(不发生错误)。只有使用 Vector.<T>() 全局函数才能将基本类型为 T 的 Vector 转换为基本类型为 T 的超类的 Vector。