2013-02-24 101 views
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的相應值。Enum Switch語句Java 6「Default」case

我的問題是,可以說「t」最終是「CSE」。我該如何處理並基本返回CLASS.ERROR的值。?

這是在Java 6中,而不是順便說一句。

+4

調用枚舉類...嗷嗷我的大腦。 – 2013-02-24 02:03:28

+0

我知道我知道。它可能會令人困惑。我的角色錯誤的命名。但我已經在我的代碼中進行了分類。 – Ezrb3zr 2013-02-24 02:05:00

+0

好吧,如果t結束爲「CSE」,例如,因爲CLASS.CSE不存在,它不會像預期的那樣返回CLASS.ERROR。相反,我得到一個錯誤,說CLASS.CSE不存在。 – Ezrb3zr 2013-02-24 02:06:44

回答

7

這裏寫這個更好的方法:

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

switch語句是多餘的...它實際上使你的代碼更脆弱「,因爲你必須要記住,如果你添加新的值更新的情況列表到enum


我還要指出的幾個文體暴行在你的代碼:

  • 調用枚舉「類」是可怕的誤導。
  • 您使用的是錯誤的標識符。所有的類型名稱都應該使用駱駝大小寫,並以大寫字母開頭。 (是的縮寫名稱可以被視爲例外,但類不是一個縮寫。)

我知道,我知道。它可能會令人困惑。我的角色錯誤的命名。但我已經在我的代碼中進行了分類。

是的......好吧,把它改成別的東西。動用你的想象力。但不要打破風格規則。

2

同意StevenC的答案,但我想:

  • 枚舉重命名爲一個更文體接受名
  • 卷的方法到枚舉
  • 重命名的方法,因此在上下文中才有意義的枚舉類名稱
  • 名稱異常參數ignore(傳統的方式來表明它被忽略)
  • 剝離符合條件的枚舉類名稱從w第i個方法

離開這個:

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

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

'parseString'應聲明爲返回'ClassLevel'。 – Genzer 2013-02-24 05:52:19

+0

@Genzer哎呀!感謝那。 (現在修復) – Bohemian 2013-02-24 06:12:42