• 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);

     
  • 相关阅读:
    [转] css3变形属性transform
    [转] ReactJS之JSX语法
    [转] 那些在使用webpack时踩过的坑
    [转] jQuery的deferred对象详解
    [转] Webpack-CommonsChunkPlugin
    [转] 用webpack的CommonsChunkPlugin提取公共代码的3种方式
    Refs & DOM
    [转] Webpack的devtool和source maps
    [转] 编译输出文件的区别
    GDB && QString
  • 原文地址:https://www.cnblogs.com/-yan/p/4274934.html
Copyright © 2020-2023  润新知