将 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;
}