A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有那个大神给解释解释,java中的enum该怎么去理解它,使用它,具体是干什么的。

3 个回复

正序浏览
大爱文艺青年。万分感谢,给我解惑了。
回复 使用道具 举报
本帖最后由 龙骑将杨影枫 于 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思想的体现之一(具体是干什么的)。



回复 使用道具 举报 1 0
本帖最后由 龙骑将杨影枫 于 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文艺青年,继续愉快的玩耍了。那啥青年欢乐多。

评分

参与人数 1技术分 +1 收起 理由
船长 + 1 船长专业点赞20年!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马