AS3类型转换:将一种类型转换为另一种类型

12

我有一个名为Room的基类,以及一个名为Attic和另一个名为Basement的子类。

我有一个控制器类,它有一个属性叫做CurrentLocation,类型为Room。我的想法是,我想能够将AtticBasement放在该属性中并得到它,然后将其强制转换为其实际类型。

所以,如果控制器上的内容是Attic类型,我正在尝试强制转换它。我以为我知道应该怎么做,但它不起作用...这就是我认为它应该是什么,借鉴了Java:

var myAttic:Attic = (Attic) Controller.CurrentLocation;

这给我一个语法错误:

1086:语法错误:在实例之前需要分号。

那么如何进行隐式转换?或者可以吗?我记得我以前在as3中做过这个。

1个回答

25

以下是在ActionScript 3中进行类型转换的选项:

  1. 使用as

var myAttic:Attic = Controller.CurrentLocation as Attic; // Assignment.
(Controller.CurrentLocation as Attic).propertyOrMethod(); // In-line use.
这将在转换失败时将null赋值给myAttic

  • Type()进行包装。

    var myAttic:Attic = Attic(Controller.CurrentLocation); // Assignment.
    Attic(Controller.CurrentLocation).propertyOrMethod(); // In-line use.
    

    如果类型转换失败,则会触发 TypeError 异常。


  • 2
    为什么这样更好?这取决于情况。如果失败,Class(bla) 的速度会慢上数个数量级。检查 null 始终更容易。 - Valentin Simonov
    @Marty Wallace,你更喜欢用什么方式来封装,是数组、XML还是对象? - average dev
    @Marty Wallace 如果我们有数组、XML或对象类型,而不是Attic,这会影响你的答案吗? - average dev
    @Marty Wallace 你还没明白... var foo:* = []; var typedFoo:Array = ??? 你怎么包装才能达到你想要的效果? - average dev
    1
    这正是提醒我们在AS3中应该通过“as”进行任何可能类型的强制转换。函数式风格是类型转换(对于原始类型可能很有用)。就这样。 - average dev

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接