我试图将if-else语句转换为switch case,但遇到了以下问题。
旧代码:
if (properties.get("database").toString().equalsIgnoreCase("SQLSERVER")) {
manager = new CManagingSQLServer();
} else if (properties.get("database").toString().equalsIgnoreCase("ORACLE")){
manager = new CManagingOracle();
} else if (properties.get("database").toString().equalsIgnoreCase("MYSQL")){
manager = new CManagingMySQL();
} else {
System.out.println("Not supported DB: " + properties.get("database").toString() + "\n");
System.out.println("Supported DB:");
System.out.println("- ORACLE");
System.out.println("- SQLSERVER");
System.out.println("- MYSQL");
System.exit(0);
}
新代码:
String database = properties.get("database").toString();
switch (database) {
case database.equalsIgnoreCase("SQLSERVER"):
manager = new CManagingSQLServer();
break;
case database.equalsIgnoreCase("ORACLE"):
manager = new CManagingOracle();
break;
case database.equalsIgnoreCase("MYSQL"):
manager = new CManagingMySQL();
break;
default:
System.out.println(database + "is not a supported database.");
System.exit(0);
break;
}
首先,字符串database
抛出了一个我不得不将setting/property(实际上不知道)更改为1.7版本的错误?! 这样做之后,我的案例现在抛出错误。 他们说:类型不匹配不能从布尔值转换为字符串
。
我读了其他SO-thread,他们说我必须尝试(String)something或something.toString()。 但是这两种情况都不起作用,而且我不明白上面提到的1.7版本的变化改变了什么。 我怎么才能让我的案子再起作用呢?
将数据库变量更改为
字符串数据库=properties.get(“database”)。toString()。TouPPerCase();
并将case切换到
大小写“sqlserver”:
当前,由于database.equalSignoRecase(“sqlserver”)
返回布尔值,但您正在打开database
,而该database
是字符串。
此外,您需要使用最低限度的Java 7,因为Java版本之前不支持开关大小写的字符串。
您面临的问题是,在switch中传递的是一个string
类型的database
。 对于节,您希望使用布尔表达式database.equalSignoRecase(。。。)
。
最简单的处理方法是更改行:
String database = properties.get("database").toString();
致:
String database = properties.get("database").toString().toUpperCase();
在case部分使用简单方法(因为您已经使用了大写的database
变量):
大小写“sqlserver”
而不是
Case Database.equalSignoRecase(“SQLServer”)
信息:可以从JDK7中获得与字符串一起工作的开关表达式。
你错过了开关情况的整个概念,你不必在你的开关情况中放上相等的条件。
这样放就行了
String database = properties.get("database").toString().toUpperCase();
switch (database) {
case "SQLSERVER":
manager = new CManagingSQLServer();
break;
case "ORACLE":
manager = new CManagingOracle();
break;
case "MYSQL":
manager = new CManagingMySQL();
break;
default:
System.out.println(database + "is not a supported database.");
System.exit(0);
break;
}