As3.0 类的【枚举】

As3.0 类的枚举

 

“枚举”是您创建的一些自定义数据类型,用于封装一小组值。ActionScript 3.0 并不支持具体的枚举工具,这与 C++ 使用 enum 关键字或 Java 使用 Enumeration 接口不一样。不过,您可以使用类或静态常量创建枚举。例如,ActionScript 3.0 中的 PrintJob 类使用名为 PrintJobOrientation 的枚举来存储由 "landscape" 和 "portrait" 组成的一组值,如下面的代码所示:

public final class PrintJobOrientation
{
public static const LANDSCAPE:String = "landscape";
public static const PORTRAIT:String = "portrait";
}

按照惯例,枚举类是使用 final 属性声明的,因为不需要扩展该类。该类仅由静态成员组成,这表示不创建该类的实例。而是直接通过类对象来访问枚举值,如以下代码摘录中所示:

var pj:PrintJob = new PrintJob();
if(pj.start())
{
if (pj.orientation == PrintJobOrientation.PORTRAIT)
{
...
}
...
}

ActionScript 3.0 中的所有枚举类都只包含 String、int 或 uint 类型的变量。使用枚举而不使用文本字符串或数字值的好处是,使用枚举更易于发现字面错误。如果枚举名输入错误,ActionScript 编译器会生成一个错误。如果使用字面值,存在拼写错误或使用了错误数字时,编译器并不会报错。在上一个示例中,如果枚举常量的名称不正确,编译器会生成错误,如以下代码摘录中所示:

    if (pj.orientation == PrintJobOrientation.PORTRAI) // compiler error

但是,如果拼错了字符串字面值,编译器并不生成错误,如下所示:

    if (pj.orientation == "portrai") // no compiler error

创建枚举的第二种方法还包括使用枚举的静态属性创建单独的类。这种方法的不同之处在于每一个静态属性都包含一个类实例,而不是字符串或整数值。例如,以下代码为一星期中的各天创建了一个枚举类:

public final class Day
{
public static const MONDAY:Day = new Day();
public static const TUESDAY:Day = new Day();
public static const WEDNESDAY:Day = new Day();
public static const THURSDAY:Day = new Day();
public static const FRIDAY:Day = new Day();
public static const SATURDAY:Day = new Day();
public static const SUNDAY:Day = new Day();
}

ActionScript 3.0 并不使用这种方法,但是许多开发人员都使用,他们更喜欢使用这种方法提供的改进类型检查功能。例如,返回枚举值的方法可将返回值限定为枚举数据类型。以下代码不但显示了返回星期中各天的函数,还显示了将枚举类型用作类型注释的函数调用:

function getDay():Day
{
var date:Date = new Date();
var retDay:Day;
switch (date.day)
{
case 0:
retDay = Day.MONDAY;
break;
case 1:
retDay = Day.TUESDAY;
break;
case 2:
retDay = Day.WEDNESDAY;
break;
case 3:
retDay = Day.THURSDAY;
break;
case 4:
retDay = Day.FRIDAY;
break;
case 5:
retDay = Day.SATURDAY;
break;
case 6:
retDay = Day.SUNDAY;
break;
}
return retDay;
} var dayOfWeek:Day = getDay();

您还可以增强 Day 类的功能,以使其将一个整数与星期中的各天关联,并提供一个 toString() 方法来返回各天的字符串表示形式。您可能希望实践一下,采用这种方法来增强 Day 类的功能。

-------------------------------------------------------------------------------------------------------------

例:

package
{

/**
* 颜色静态数据类
*
*/
public class ColorEnum
{
public static const _FFF3BC:ColorEnum = new ColorEnum(0xFFF3BC,"#FFF3BC","橙红色");
public static const _00FF00:ColorEnum = new ColorEnum(0x00FF00,"#00FF00","绿色");
public static const _FF0000:ColorEnum = new ColorEnum(0xFF0000,"#FF0000","红色");
public static const _FFFFFF:ColorEnum = new ColorEnum(0xFFFFFF,"#FFFFFF","白色");
public static const _00FFFF:ColorEnum = new ColorEnum(0x00FFFF,"#00FFFF","青色");
public static const _000000:ColorEnum = new ColorEnum(0x000000,"#000000","黑色");
public static const _663300:ColorEnum = new ColorEnum(0x663300,"#663300","棕色");
public static const _0000FF:ColorEnum = new ColorEnum(0x0000FF,"#0000FF","蓝色");
public static const _422200:ColorEnum = new ColorEnum(0x422200,"#422200","深棕色");
public static const _0066CC:ColorEnum = new ColorEnum(0x0066CC,"#0066CC","淡蓝色");
public static const _339900:ColorEnum = new ColorEnum(0x339900,"#339900","草绿色");

public static var ENUM_TYPE:Object = {ENGLISH:"english",CHINESE:"chinese",GERMAN:"german"}

public var original:Number;
public var name:String;
public var description:String;

public function ColorEnum(original:Number,name:String,description:String):void
{
this.original = original;
this.name = name;
this.description = description;
}
}
}

-------------------------------------------------------------------------------------------------------------

引用:

trace(ColorEnum._FFF3BC.original,ColorEnum._FFF3BC.name,ColorEnum._FFF3BC.description);

 
 
上一篇:js打开、关闭页面和运行代码那些事


下一篇:vue wabpack 切换开发环境 和生成环境 的接口地址