2012-10-19 73 views
0

在Python中的一個,您可以:檢查是否值是很多常量

if error_code in (1213,1205,1317,2006,2013): 
    ... 

你怎麼能做到簡潔的同類檢查 - 如果看到一個int是衆多選擇之一 - 在Java中?

更新:我採取的解決辦法:

private static final Set<Integer> MySQLRetryCodes = 
    Collections.unmodifiableSet(new HashSet<Integer>(
     Arrays.asList(
      1205, // lock timeout 
      1213, // deadlock 
      1317,2006,2013 // variations on losing connection to server 
     ))); 

再後來:

if(MySQLRetryCodes.contains(sqlError.getErrorCode()) { 
    ... 

回答

1

我會使用HashSet的:

if (new HashSet<Integer> 
      (Arrays.asList(1213,1205,1317,2006,2013)).contains(error_code)){ 

     //do something 

    } 
0

它們添加到ArrayList並使用contains方法。

ArrayList<Integer> errorList = new ArrayList<Integer>(); 
     errorList.add(1213); 
     errorList.add(1205); 
     errorList.add(1317); 
    if(errorList.contains(error_code))) 
     { 
     //code 
     } 
2

常數會在列表中,你會按如下方式使用方法:

if (Arrays.asList(1213,1205,1317,2006,2013).contains(error_code)) { 
    ... 
} 

最好的辦法是到什麼地方申報該名單爲常數,並使用它,如下所示:

public static final List<Integer> ERROR_CODES = 
    Arrays.asList(1213,1205,1317,2006,2013); 

... 
if (ERROR_CODES.contains(error_code)) { 
    ... 
} 
+0

我喜歡這種方法;小錯字:數組。 asList(... – Will

+0

編譯器會自動確定類型,並且''不是明確需要的。 – Vikdor

+0

好吧,我只需要輸入就可以讓Eclipse高興起來 – Will

1

寫作ArrayList錯誤代碼是真的bad designAnd populate it just to check whether error code is present is nightmare.

您應該考慮更換Enums您的整數。

您可以定義錯誤代碼爲ENUM和每個常量將舉行錯誤代碼整型常量的值。

enum ErrorCode { 
    ERROR_213(213), ERROR_1205(1205), ERROR_1317(1317), ERROR_2006(2006), ERROR_DEFAULT(
      1); 

    private int errorcode; 

    private ErrorCode(int errorcode) { 
     this.errorcode = errorcode; 
    } 

    public static ErrorCode valueOf(int errorcode) { 

     for (ErrorCode error : ErrorCode.values()) { 
      if (error.getErrorCode() == errorcode) 
       return error; 
     } 
     return ErrorCode.ERROR_DEFAULT; 
    } 

    public int getErrorCode() { 
     return errorcode; 
    } 
} 

現在,如果你想int值隨時enum轉換,那麼你可以做以下

ErrorCode errorcode = ErrorCode.valueOf(213);