4
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 中。

4

2 回答 2

6

这是一个更好的写法:

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

switch 语句是多余的......它实际上使您的代码更加脆弱,因为如果您向enum.


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

  • 将枚举称为“CLASS”是一种可怕的误导。
  • 您使用了错误类型的标识符。所有类型名称都应使用驼峰式书写,并以大写字母开头。(作为首字母缩略词的名称可以被视为例外,但 CLASS 不是首字母缩略词。)

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

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

于 2013-02-24T02:25:06.843 回答
1

同意 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;
        }
    }
}
于 2013-02-24T02:42:51.553 回答