我尝试将 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
抛出一个错误,我必须将设置/属性(实际上不知道)更改为1.7版本?!这样做之后,我的案例现在抛出错误。他们说:Type mismatch cannot convert from boolean to String
。
我读了其他SO-thread,他们说我必须尝试(String)某事或某事。ToString()。但这两种情况都不起作用,我不明白上述 1.7 版本的更改发生了什么变化。 我怎样才能让我的案件再次发挥作用?
将数据库变量更改为
String database = properties.get("database").toString().toUpperCase();
并将大小写切换为
case "SQLSERVER":
目前,您收到错误,因为
database.equalsIgnoreCase("SQLSERVER")
返回布尔值,但您正在打开 database
,它是一个字符串。
此外,您至少需要使用 Java 7,因为之前的 Java 版本不支持字符串上的 switch case。
您面临的问题是,在 switch 中您传递了
String
输入的 database
。
如果您想使用布尔表达式database.equalsIgnoreCase(...)
。
解决这个问题的最简单方法是更改线路:
String database = properties.get("database").toString();
至:
String database = properties.get("database").toString().toUpperCase();
并且在 case 部分使用简单的方法(因为您已经有大写的
database
变量):
case "SQLSERVER"
而不是
case database.equalsIgnoreCase("SQLSERVER")
信息: JDK 7 提供了使用字符串的 Switch 表达式。
在 case 语句中使用字符串值。
Case "SQLSERVER":
您缺少 switch case 的整个概念,您不必在 switch case 中添加相等的条件。
就这样放就可以了
String database = properties.get("database").toString().toUpperCase();
manager = switch (database) {
case "SQLSERVER" -> new CManagingSQLServer();
case "ORACLE" -> new CManagingOracle();
case "MYSQL" -> new CManagingMySQL();
default -> {
System.out.println(database + " is not a supported database.");
System.exit(0);
yield null;
}
};