Flex/AS利用类变量加载特性实现枚举(Enum)

网上查了一下,Flex里是没有枚举类型的。如果想要一个类似的功能,只能自己实现。
枚举类关键在于变量只能引用,而不能自己构造,所以在构造方法里动动手脚即可。
根据Flex类加载的一些特性,我的实现如下:

package {
public class Direction {
public static const UP:Direction = new Direction(0);
public static const DOWN:Direction = new Direction(1);
public static const LEFT:Direction = new Direction(2);
public static const RIGHT:Direction = new Direction(3);

private static var _limit:Boolean = limit();

private var _value:Object;

public function Direction(value:Object) {
if (_limit) {
throw new Error("Cannot initialize Enum outside!");
return;
}
this._value = value;-
}


private static function limit():Boolean {
return true;
}

public function toString():String {
switch(this._value as int) {
case 0:
return "Up";
case 1:
return "Down";
case 2:
return "Left";
case 3:
return "Right";

}
return "Undefined direction!";
}
}
}

对于static变量的加载,是在类刚开始加载的时候执行的。_limit在最后也就是其他枚举变量加载完毕后加载,值被设置为true,那么在以后调用构造方法的时候就会抛出错误。
测试代码:

private function init():void {
var week:Direction = Direction.UP;
var t:Direction = Direction.LEFT;
trace(week);
week = Direction.DOWN;
trace(week);
week = Direction.LEFT;
trace(week);
if (t == week) {
trace("t is " + Direction.LEFT);
} else {
trace("t is not " + Direction.LEFT);
}
week = Direction.RIGHT;
trace(week);
if (t == week) {
trace("t is " + Direction.LEFT);
} else {
trace("t is not " + Direction.LEFT);
}
week = new Direction(31);
trace(week);
}

结果:
[quote]
Up
Down
Left
t is Left
Right
t is not Left
[color=red]
Error: Cannot initialize Enum outside!
at Direction()[C:\Users\Henry\Adobe Flash Builder 4\EnumerationTest\src\Direction.as:14][/color]
[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值