Enum Switch语句Java 6“默认”情况

时间:2013-02-24 02:02:27

标签: java enums switch-statement

private enum CLASS {FMAN, SOPH, JUN, SEN, GRAD, ERROR};

private CLASS stringToClass(String t){

    switch(CLASS.valueOf(t))
    {
    case FMAN: return CLASS.FMAN;
    case SOPH: return CLASS.SOPH;
    case JUN: return CLASS.JUN;
    case SEN: return CLASS.SEN;
    case GRAD: return CLASS.GRAD;
    default: 
        System.out.println("NOT VALID CLASS. ERROR");
        return CLASS.ERROR;
    }
}

所以我在这里有这段代码。在构造时,我有这个方法从给定的字符串t返回相应的值。

我的问题是,让我们说“t”最终成为“CSE”。我该如何处理并基本上返回CLASS.ERROR的值。?

这是Java 6,而不是7。

2 个答案:

答案 0 :(得分:7)

这是一个更好的方式来写这个:

private CLASS stringToClass(String t){
    try {
        return CLASS.valueOf(t);
    } catch (InvalidArgumentException ex) {
        return CLASS.ERROR;
    }
}

switch语句是多余的...它实际上会使你的代码更加脆弱'因为如果你向enum添加新值,你必须记住更新案例列表。


我还应该在你的代码中指出一些风格暴行:

  • 调用枚举“CLASS”非常具有误导性。
  • 您使用的是错误的标识符。所有类型名称都应使用驼峰大小写,并以大写字母开头。 (作为首字母缩略词的名称可以视为例外,但CLASS不是首字母缩略词。)
  

我知道我知道。这可能令人困惑。我的命名不好。但我已经在我的代码中进行了分类。

是的......好吧,把它换成别的东西。动用你的想象力。但是不要违反风格规则。

答案 1 :(得分:2)

同意StevenC的回答,但我会:

  • 将枚举重命名为更具风格的名称
  • 将方法滚动到枚举
  • 重命名方法,使其在枚举类名称
  • 的上下文中有意义
  • 将Exception参数命名为ignore(表示忽略它的传统方式)
  • 使用方法
  • 剥离合格的枚举类名称

离开这个:

private enum ClassLevel {
    FMAN, SOPH, JUN, SEN, GRAD, ERROR;

    static ClassLevel parseString(String t) {
        try {
            return valueOf(t);
        } catch (InvalidArgumentException ignore) {
            return ERROR;
        }
    }
}