将 if-else 转换为 switch case 会引发错误 [Java]

问题描述 投票:0回答:4

我尝试将 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 版本的更改发生了什么变化。 我怎样才能让我的案件再次发挥作用?

java switch-statement statements
4个回答
3
投票

将数据库变量更改为

String database = properties.get("database").toString().toUpperCase(); 

并将大小写切换为

case "SQLSERVER": 

目前,您收到错误,因为

database.equalsIgnoreCase("SQLSERVER")
返回布尔值,但您正在打开
database
,它是一个字符串。

此外,您至少需要使用 Java 7,因为之前的 Java 版本不支持字符串上的 switch case。


2
投票

您面临的问题是,在 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 表达式。


1
投票

在 case 语句中使用字符串值。

Case "SQLSERVER":


1
投票

您缺少 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;
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.