2

Pythonでは、次のことができます。

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

Javaで同じ種類のチェック(intが多くの選択肢の1つであるかどうかを確認する)を簡潔に行うにはどうすればよいですか?

更新:私が採用したソリューション:

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()) {
    ...
4

6 に答える 6

3

定数はリストにあり、contains()次のようにメソッドを使用します。

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)) {
    ...
}
于 2012-10-19T07:03:59.700 に答える
1

エラーArrayListコードの記述は本当にbad designです。And populate it just to check whether error code is present is nightmare.

整数を列挙型に置き換えることを検討する必要があります。

エラーコードを列挙型として定義でき、各定数はエラーコードのint定数値を保持します。

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);
于 2012-10-19T07:16:14.443 に答える
1

私は HashSet を使用します:

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

       //do something

   }
于 2012-10-19T07:11:48.267 に答える
0

それらを に追加しArrayList、メソッドを使用しcontainsます。

ArrayList<Integer> errorList = new ArrayList<Integer>();
        errorList.add(1213);
        errorList.add(1205);
        errorList.add(1317);
    if(errorList.contains(error_code)))
       {
         //code
       }
于 2012-10-19T07:03:54.087 に答える