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

时间:2013-07-15 23:56:07

标签: java string switch-statement binary-operators

因此,条件中的所有变量都是静态字符串。 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;
         }

6 个答案:

答案 0 :(得分:4)

首先,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.

答案 1 :(得分:2)

Java 7 example

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

此外,我从未在OR内部看到switch声明。我强烈建议不要这样做。

答案 2 :(得分:1)

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

         case INT: case TINYINT:

答案 3 :(得分:1)

这个表达式评估的内容是什么?

INT || TINYINT

INT TINYINT

的数据类型有哪些?

我只看到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;

答案 4 :(得分:0)

java 7之后支持

答案 5 :(得分:0)

即使使用字符串,也不能在switch语句中使用逻辑运算符。您一次只能测试一个案例。