将 if-else 转换为 switch case 会抛出错误 [Java]
Transforming if-else into switch case throws error [Java]
我试图将我的 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版本?!这样做之后,我的案例现在抛出错误。他们说:Type mismatch cannot convert from boolean to String
.
我读了其他 SO-thread,他们说我必须尝试 (String)something 或 something.ToString()。但是这两种情况都没有用,我不明白上面提到的 1.7 版的变化有什么变化。
我怎样才能让我的案例再次发挥作用?
将数据库变量更改为
String database = properties.get("database").toString().toUpperCase();
并将大小写切换为
case "SQLSERVER":
目前,您收到错误消息,因为 database.equalsIgnoreCase("SQLSERVER")
returns 布尔值,但您正在打开 database
,这是一个字符串。
此外,您至少需要使用 Java 7,因为之前的 Java 版本不支持 String 的 switch case。
您面临的问题是,在 switch 中,您传递了一个 String
类型的 database
。
如果您想要使用布尔表达式 database.equalsIgnoreCase(...)
.
最简单的处理方法是更改行:
String database = properties.get("database").toString();
至:
String database = properties.get("database").toString().toUpperCase();
如果部分使用简单方法(因为您已经大写 database
变量):
case "SQLSERVER"
而不是
case database.equalsIgnoreCase("SQLSERVER")
信息:
JDK 7.
提供了适用于字符串的开关表达式
在 case 语句中使用字符串值。
Case "SQLSERVER":
您错过了 switch case 的整个概念,您不必在 switch case 中放置相等的条件。
这样放就可以了
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;
}
我试图将我的 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版本?!这样做之后,我的案例现在抛出错误。他们说:Type mismatch cannot convert from boolean to String
.
我读了其他 SO-thread,他们说我必须尝试 (String)something 或 something.ToString()。但是这两种情况都没有用,我不明白上面提到的 1.7 版的变化有什么变化。 我怎样才能让我的案例再次发挥作用?
将数据库变量更改为
String database = properties.get("database").toString().toUpperCase();
并将大小写切换为
case "SQLSERVER":
目前,您收到错误消息,因为 database.equalsIgnoreCase("SQLSERVER")
returns 布尔值,但您正在打开 database
,这是一个字符串。
此外,您至少需要使用 Java 7,因为之前的 Java 版本不支持 String 的 switch case。
您面临的问题是,在 switch 中,您传递了一个 String
类型的 database
。
如果您想要使用布尔表达式 database.equalsIgnoreCase(...)
.
最简单的处理方法是更改行:
String database = properties.get("database").toString();
至:
String database = properties.get("database").toString().toUpperCase();
如果部分使用简单方法(因为您已经大写 database
变量):
case "SQLSERVER"
而不是
case database.equalsIgnoreCase("SQLSERVER")
信息: JDK 7.
提供了适用于字符串的开关表达式在 case 语句中使用字符串值。
Case "SQLSERVER":
您错过了 switch case 的整个概念,您不必在 switch case 中放置相等的条件。
这样放就可以了
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;
}