提问者:小点点

将if-else转换为switch case引发错误[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版本的错误?! 这样做之后,我的案例现在抛出错误。 他们说:类型不匹配不能从布尔值转换为字符串

我读了其他SO-thread,他们说我必须尝试(String)something或something.toString()。 但是这两种情况都不起作用,而且我不明白上面提到的1.7版本的变化改变了什么。 我怎么才能让我的案子再起作用呢?


共3个答案

匿名用户

将数据库变量更改为

字符串数据库=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;
}