在Python中,您可以:
if error_code in (1213,1205,1317,2006,2013):
...
如何简洁地进行相同类型的检查 - 在Java中查看int是否是众多选择之一?
更新:我采用的解决方案:
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()) {
...
答案 0 :(得分: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)) {
...
}
答案 1 :(得分:1)
我会使用HashSet:
if (new HashSet<Integer>
(Arrays.asList(1213,1205,1317,2006,2013)).contains(error_code)){
//do something
}
答案 2 :(得分:1)
为错误代码编写ArrayList
实际上是bad design
。 And populate it just to check whether error code is present is nightmare.
您应该考虑用Enums替换整数。
您可以将错误代码定义为枚举,并且每个常量将为错误代码保留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);
答案 3 :(得分:0)
将它们添加到ArrayList
并使用contains
方法。
ArrayList<Integer> errorList = new ArrayList<Integer>();
errorList.add(1213);
errorList.add(1205);
errorList.add(1317);
if(errorList.contains(error_code)))
{
//code
}
答案 4 :(得分:0)
我现在有一个类似的问题,阅读此问题的答案,我9次来到Java下一个解决方案:
private static int CODE_IMAGE = 0;
private static int CODE_FILE = 5;
private static final Set<Integer> CurrentCloudItemTypes = Set.of(CODE_IMAGE, CODE_FILE);
后来:
protected boolean hasCorrectType(CloudImage image) {
return CurrentCloudItemTypes.contains(image.getType());
}
谢谢您的想法,它们对我很有帮助。
答案 5 :(得分:0)
只需使用以下返回值:
Arrays.asList(1213, 1205, 1317, 2006, 2013).contains(error_code)
或者如果您有Apache Commons Lang library,则最好使用此值:
ArrayUtils.contains(USE_CASE_1, error_code)
其中USE_CASE_1
被定义为常量数组:
private static final int[] USE_CASE_1 = {1213, 1205, 1317, 2006, 2013};
这是与您上面的Python代码最简单,最有效的等效方式,在该代码中,您对<{> 1}变量进行了不频繁的检查,而对一小部分进行了指定值的strong>。实际上,您每次都不需要执行一次新的Set设置,因为这样浪费资源的效率很低。仅当它是一个静态的final字段(即常量)并且仅在非常频繁的检查的情况下,才有意义。
另一种解决方案是使用这样的switch语句: 这并不优雅,但即使对一小组指定值进行非常频繁的检查,它也是最有效的。在这种情况下,它甚至比常量Set更有效。error_code