从阵列中抓取时类型强制失败

时间:2014-05-26 16:00:55

标签: actionscript-3

假设我有一个类Person,其中包含一个名为children的私有数组,其中包含Person个对象。它有一个方法getChildren():Array { return this.children; }

如果我trace(p.getChildren()[0])(其中pPerson的实例),我可以成功打印出阵列中第一个孩子的内容。但是,如果我尝试投射var firstChild:Person = p.getChildren()[0],我会收到错误Type Coercion failed: cannot convert []@a027b81 to classes.Person

出了什么问题?

1 个答案:

答案 0 :(得分:1)

当你这样做时:var firstChild:Person = p.getChildren()[0]你实际上没有施放。您只是想将Array填充到您定义为Person的对象中,这就是您收到错误的原因。

要进行投射,您需要执行以下操作之一:

var firstChild:Person = Person(p.getChildren()[0]); //this will error if the cast fails

var firstChild:Person = p.getChildren()[0] as Person; //this will return null if the cast fails

然而,更好的方法可能是使用Vector - 它在AS3中就像一个数组,但所有成员都必须是指定类型。所以像这样:

private var children_:Vector.<Person>;
public function getChildren():Vector.<Person>{ return this.children_; }

然后你可以这样做:

var firstChild:Person = p.getChildren()[0]

因为Vector的每个成员都已定义为Person对象。


此外,您可能需要考虑使用getter方法而不是getChildren

public function get children():Vector.<Person> { return this.children_;}

然后您像属性一样访问它(但不能设置它)。