2012-10-19 74 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);