繁体   English   中英

为什么此Java Switch-Case不起作用?

[英]Why does this Java Switch-Case not work?

因此,条件中的所有变量都是静态字符串。 type本身实际上是一个字符串。

         switch(type) {
             case (INT || TINYINT):
                 preparedStatement = setInteger(preparedStatement, value, index);  
                 break;
             case (BIGINT || LONG):
                 preparedStatement = setLong(preparedStatement, value, index);  
                 break;
             case (DATETIME || TIMESTAMP):
                 preparedStatement = setTimestamp(preparedStatement, value, index);  
                 break;
             case (MEDIUMTEXT || ENUM || TEXT || LONGTEXT || VARCHAR):
                 preparedStatement = setString(preparedStatement, value, index);  
                 break;
         }

首先,在Java 7+中支持在字符串上的switch语句,但在Java 6及更高版本中不支持。

接下来, || 运算符(逻辑或运算符)仅适用于boolean值,而不适用于String值。 但是,您可以通过列出案例并在不超过相关代码的情况下中断代码,来在多个案例上运行相同的代码:

switch(type) {
    case INT:
    case TINYINT:
        // This code will run for INT and TINYINT only.
        preparedStatement = setInteger(preparedStatement, value, index);  
        break;
    case BIGINT:
    case LONG:
        // This code will run for BIGINT and LONG only.
        preparedStatement = setLong(preparedStatement, value, index);  
        break;
    // etc.

Java 7 示例

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
     String typeOfDay;
     switch (dayOfWeekArg) {
         case "Monday":
             typeOfDay = "Start of work week";
             break;
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
             typeOfDay = "Midweek";
             break;
         case "Friday":
             typeOfDay = "End of work week";
             break;
         case "Saturday":
         case "Sunday":
             typeOfDay = "Weekend";
             break;
         default:
             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
     }
     return typeOfDay;
}

此外,我从未见过像这样的switch内部的OR语句。 我强烈建议您不要这样做。

假设您使用的是Java SE 7(或更高版本),并且常量是static final String ,则语法不是Java。

         case INT: case TINYINT:

此表达式的计算结果是什么?

INT || TINYINT

INTTINYINT的数据类型是什么

我只见过将switch与某些原语(Java 7中的新功能)和声明为final变量一起使用。

如果这没有引发编译错误,则|| 必须为这些数据类型定义运算符。 但是除非以某种方式在编译时解决该问题,否则将不允许该运算符。 (同样,这可能是我不知道的Java 7中的新功能。)


如果您尝试执行“ ”逻辑,则规范模式(至少在Java的7之前版本中)为:

    switch(type) {
        case INT:
        case TINYINT:
             preparedStatement = setInteger(preparedStatement, value, index);  
             break;
        case BIGINT:
        case LONG:
             preparedStatement = 
             break;

在Java 7及更高版本中受支持

即使在使用String的情况下,也不能在switch语句中使用逻辑运算符。 您一次只能测试一个案例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM