黑马程序员技术交流社区

标题: 有那个大神给解释解释,java中的enum该怎么去理解它 [打印本页]

作者: 夏俊男    时间: 2014-12-4 14:15
标题: 有那个大神给解释解释,java中的enum该怎么去理解它
有那个大神给解释解释,java中的enum该怎么去理解它,使用它,具体是干什么的。

作者: 龙骑将杨影枫    时间: 2014-12-4 15:25
本帖最后由 龙骑将杨影枫 于 2014-12-4 15:27 编辑

我举一个简单的例子来说明枚举类型的用法。
假设,我有一个给定的字符串集合(注意,是字符串集合) {“红”,"黑","蓝"},然后我想随机取一个颜色并给出判断,如果是红色,那么输出"this is red",其他颜色同理。
那么代码应该怎么写呢?
流程是String[] colors={“红","黑","蓝"},然后 int i=Math.random()*2.String color=colors
高潮来了,如何判断呢?
普通青年的写法是 if(color.equels("红")) syso("this is red")。
黑与蓝依次类推。
这是比较大众化而且非常实用的写法。
但是我作为一个文艺青年,我想换种方式写,比如用swich这个比较高效清晰的结构来写可以吗?
答案是不行,因为作为switch语句来说,是不能以String作为 判断值和表达式的。
比如switch(color)是会被Eclipse毙掉的,“无法编译”。(注:仅限于1.7之前的java版本,1.7已完美支持)
但是作为有着一颗2B心情的文艺青年,明知山有虎,偏向虎山行。此路不通我就绕路走。
于是我定义一个枚举
public enum ColorEnum {
        RED("红"), BLUE("蓝色"),BLACK("黑色");
        private final String color;
        ColorEnum(String color) {
            this.color = color;
        }
        public String getColor() {
            return color;
        }
}
然后我新建一个Demo测试类,在main方法里这么写。
ColorEnum[] temp =ColorEnum.values();
        int i=(int) (Math.random()*2);
        switch(temp){
        case RED:
            System.out.println("这是红色");
            break;
        case BLUE:
            System.out.println("这是蓝色");
            break;
        case BLACK:
            System.out.println("这是蓝色");
            break;
        }
大功告成,功德圆满,我终于可以继续做我的2B文艺青年,继续愉快的玩耍了。那啥青年欢乐多。

作者: 龙骑将杨影枫    时间: 2014-12-4 15:40
本帖最后由 龙骑将杨影枫 于 2014-12-4 15:47 编辑

当然,枚举被设计出来主要是简化程序员的操作并且方便编程。
在以后的编程中,一般会定义系统常量在各处实用。有的时候这些常量是非常相近的、大部分重复的。比如说以后做报表可能有"部门A工作报告" "部门B工作报告" "部门C工作报告"and so on这样的字符串作为报表的title。在定义常量的时候这些都必须定义进去。一般的定义方式可以定义常量字符串public final static(好吧我忘记这几个的书写顺序了,可以自行调整) String report_tile_depart_A,public final static String report_tile_depart_B....这样写起来很筋疼不说,还容易写错。
最好的方式就是定义枚举。
public enum TitleEnum {
        DEPART_A("部门A工作报告"), DEPART_B("部门B工作报告")...;
        private final String title;
        TitleEnum (String title) {
            this.title= title;
        }
        public String getTitle() {
            return title;
        }
}
这样引用的时候就是TitleEnum.DEPART_A(根据惯例一般是大写),简单省事省时省力,而且还有更多的函数进行处理调用。
换句话说,所谓的枚举我个人理解是对常量的封装(枚举是什么)和归类整理,参见以上代码(如何使用),方便程序员在编程时进行引用和处理,是OOP思想的体现之一(具体是干什么的)。




作者: 夏俊男    时间: 2014-12-4 23:51
大爱文艺青年。万分感谢,给我解惑了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2