网上查了一下,Flex里是没有枚举类型的。如果想要一个类似的功能,只能自己实现。
枚举类关键在于变量只能引用,而不能自己构造,所以在构造方法里动动手脚即可。
根据Flex类加载的一些特性,我的实现如下:
对于static变量的加载,是在类刚开始加载的时候执行的。_limit在最后也就是其他枚举变量加载完毕后加载,值被设置为true,那么在以后调用构造方法的时候就会抛出错误。
测试代码:
结果:
[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]
枚举类关键在于变量只能引用,而不能自己构造,所以在构造方法里动动手脚即可。
根据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]