as3中常量通常是使用的字符串,比如说TextFieldType.INPUT、StageAlign.TOP_LEFT,有些时候这样使用没什么大碍,而有些时候如果随意传入一个字符串就可能出现运行异常,解决的办法就是使用if…else…来判断,如果不是允许的字符串则抛出异常,提醒调用者。
今天想到了一个代替的方法,能够很好的避免if…else…的长串判断,并且是强类型的,类似于枚举。缺点就是必须创建对象。
今天想到了一个代替的方法,能够很好的避免if…else…的长串判断,并且是强类型的,类似于枚举。缺点就是必须创建对象。
package
{
import flash.errors.IllegalOperationError;
public class MapType
{
// 常量 a
public static const RECTANGLE_MAP_RECTANGLE_TILE:MapType = createInstance(“rectangleMapRectangleTile”);
// 常量 b
public static const DIAMOND_MAP_DIAMOND_TILE:MapType = createInstance(“diamondMapDiamondTile”);
// 常量 c
public static const RECTANGLE_MAP_DIAMOND_TILE:MapType = createInstance(“rectangleMapDiamondTile”);
// 常量 d
public static const RECTANGLE_MAP_HEXAGON_TILE:MapType = createInstance(“rectangleMapHexagonTile”);
// 记录常量的字符串形式
private var _type:String = null;
public function MapType(type:String)
{
if (!_allowInstance)
{
throw new IllegalOperationError();
}
_type = type;
}
// 只允许类内部创建对象
private static var _allowInstance:Boolean = false;
private static function createInstance(type:String):MapType
{
_allowInstance = true;
var instance:MapType = new MapType(type);
_allowInstance = false;
return instance;
}
public function toString():String
{
return _type;
}
}
}