Switch语句给出了不兼容类型错误

时间:2012-09-20 21:42:22

标签: java switch-statement

我正在尝试编译,我收到此错误:

enigma/Rotor.java:30: incompatible types found : java.lang.String required: int     switch(name){
1 error

为什么我收到此错误?我如何解决它?它在包中,我似乎无法弄明白。这是代码:

String label;

Rotor(){;}

Rotor(String name){
  switch(name){
    case "B":
      conversion_chart = B;
      break;
    case "C":
      conversion_chart = C;
      break;
    case "I":
      conversion_chart=I;
      notch = NOTCH[0];
      break;
    case "II":
      conversion_chart=II;
      notch = NOTCH[1];
      break;
    case "III":
      conversion_chart=III;
      notch = NOTCH[2];
      break;
    case "IV":
      conversion_chart=IV;
      notch = NOTCH[3];
      break;
    case "V":
      conversion_chart=V;
      notch = NOTCH[4];
      break;
    case "VI":
      conversion_chart=VI;
      notch = NOTCH[5];
      break;
    case "VII":
      notch = NOTCH[6];
      conversion_chart=VII;
      break;
    case "VIII":
      notch = NOTCH[7];
      conversion_chart=VIII;
      break;
  }
  label = name;
  position = 0;
}

6 个答案:

答案 0 :(得分:10)

switch(name)

switch语句只支持Java7以后的字符串。

我猜您使用的编译器版本低于Java7

选项:

1) You need to either upgrade to Java7 
2) Change switch statement to `if/else`
3) Use `int` in switch instead of `String`

答案 1 :(得分:4)

开关接受来自java 7的字符串在java 7之前只有 int兼容类型(short,byte,int,char)可以作为switch参数传递

答案 2 :(得分:3)

如果您正在使用maven项目,则只需将以下代码添加到ypur pom.xml即可解决问题:

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

答案 3 :(得分:1)

如果你使用 maven,请将 pom 中的构建更改为:

            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

否则将 JDK 版本更改为 1.8+

答案 4 :(得分:0)

除非你有Java7 +,否则你不能切换一个String实例,只能切换int(和byte / char / short,但不能切换long / double)。您现在最好的选择是更改为if else语句,如下所示:

if("B".equals(string)) {
    //handle string being "B"
} else if("C".equals(string)) {
    //handle string being "C"
} else ...

有关切换的更多信息,请参阅Oracle tutorial。他们提到了Java7 String功能:

  

在Java SE 7及更高版本中,您可以在switch语句的表达式中使用String对象。

答案 5 :(得分:-1)

在Java中,您只能对byte,char,short或int进行切换,而不能对字符串进行切换。