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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦想蓝色天空 高级黑马   /  2013-6-29 00:20  /  2035 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-7-1 07:53 编辑

今天在学习enum的时候,突然想到一个问题,switch可以判断enum类型,但是switch条件必须是enum的其中一个值,个人愚蠢的认为,既然我已经知道了是哪个固定值,switch判断还有什么用,顿时感觉这个功能很鸡肋,也许是我还没有完全明白这个用法,请各位指导
示例代码如下:
//定义一个enum枚举类型,包括两个实例ON,OFF
public enum State {
  ON, OFF
};

//测试函数
public static void main(String[] args) {
  //switch与enum的结合使用
  State switchState = State.OFF;
  switch (switchState) {
  case OFF:
   System.out.println("OFF");
   break;
  case ON:
   System.out.println("ON");
   break;
  }

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
“switch条件必须是enum的其中一个值,个人愚蠢的认为,既然我已经知道了是哪个固定值,switch判断还有什么用”枚举中好几个实例,你怎么就知道是哪一个了?
回复 使用道具 举报
楼主不能主观的认为我给了switchState 一个值,那它就一定是那个值了。换一个角度如果我是在构造函数中传入这个值呢?并不一定每次都传相同的值吧。
给一个我在书上看到的例题,我觉得可以很容易的看出来原因。
(ps:删掉了部分enum实例)
  1. public class MoneyEnum {
  2.         Money money;

  3.         public static void main(String[] args) {
  4.                 for (Money m : Money.values())
  5.                         System.out.println(m + " ordinal: " + m.ordinal());

  6.                 MoneyEnum me1 = new MoneyEnum(Money.ONE);
  7.                 MoneyEnum me2 = new MoneyEnum(Money.TWO);
  8.                 me1.showMoney();
  9.                 me2.showMoney();
  10.         }

  11.         public MoneyEnum(Money money) {
  12.                 this.money = money;
  13.         }

  14.         public void showMoney() {
  15.                 switch (money) {
  16.                 case ONE:
  17.                         System.out.println("this is ONE yuan");
  18.                         break;
  19.                 case TWO:
  20.                         System.out.println("this is TWO yuan");
  21.                         break;
  22.                 case FIVE:
  23.                         System.out.println("this is FIVE yuan");
  24.                         break;
  25.                
  26.                 }
  27.         }

  28. }

  29. enum Money {
  30.         ONE, TWO, FIVE
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。
枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见。 例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY,就是一个枚举。 枚举的说明与结构和联合相似,其形式为:

        enum 枚举名{              标识符[=整型常数],              标识符[=整型常数],              ...              标识符[=整型常数],         } 枚举变量;

要注意的是,,
枚举的作用:枚举是一种规范它规范了参数的形式,这样就可以不用考虑类型的不匹配

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
先举个例子,假如程序中每周7天分别对应,int 1-7 ,然后用switch判断  如果为1 就是星期一 ....
这个你明白了,枚举你就明白了,jdk1.5在switch条件中添加了枚举,和上面原理相同
回复 使用道具 举报
帖子解决。请及时联系版主改成已解决。不然会漏分的哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马