10.枚举的使用

首先我们要知道什么是枚举,为什么要用枚举。

我们在日常使用中,有时候,变量的取值只在一个有限的集合内。例如:销售的服装或奶茶店只有小、中、大、超大这四种尺寸。当然,可以将这些尺码分别编码为1、2、3、4或者S、M、L、X。但这样存在着一定的隐患。在变量中很有可能保存的是一个错误的值(例如0或者m)。针对这种情况,可以自定义枚举类型。这样就可以将变量的值限制在枚举内。枚举类型包括有限个命名的值。例如:

 enum Size{ SMALL,MEDIUM,LARGE,EXTRA_LARGE };

现在可以声明这种类型的变量:

Size s = Size.MEDIUM;

Size类型的取值只能是这几个值得其中一个或者null值。

实际上,这个声明定义的枚举是一个类,而它刚好有四个实例。所以在比较两个枚举类型的值时,不需要调用equals,而直接使用“==”就可以。

如果有需要的话,可以在枚举类内添加一些构造方法。当然,构造方法只是在构造枚举常量的时候被调用。例如

public enum Size{

   SMALL("S"),MEDIUM("M"),LARGE("L"),EXTAR_LARGE("XL");
        private String abb;
        private Size(String add){
            this.abb = abb;
        }
        public String getAbb(){return abb;};

}

所有的枚举类型都是Enum类的子类,他们继承这个类的许多方法。常见的就是toString(),这个方法能返回枚举常量名。例如,Size.SMALL.toString()将返回字符串"SMALL".

toString的逆方法是静态方法valueOf().例如

Size s = Enum.valueOf(Size.class,"SMALL");

将s设置成Size.SMALL。

每个枚举类型都有一个静态的values方法,他将返回一个包含全部枚举值的数组。比如:

Size[] values = Size.values();

返回包含元素Size.SMALL,Size.MEDIUM,Size.LARGE和Size.EXTRA_LARGE的数组。

ordinal方法返回enum声明中枚举常量的位置,位置从0开始计算。例如 Size.MEDIUM.ordinal()返回1。

posted @ 2020-12-19 20:07  mokpiet  阅读(188)  评论(0编辑  收藏  举报