关于java:Switch语句给出了不兼容的类型错误

Switch Statement gives Incompatible Types error

我正在尝试编译,但得到以下错误:

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

为什么我会得到这个错误?我该怎么修?它在包裹里,我好像想不出来。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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;
}


1
switch(name)

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

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

选项:

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


开关接受来自Java 7的字符串。在Java 7之前,只有int类型的兼容类型(短、字节、int、char)可以作为转换参数传递。


如果您使用的是Maven项目,那么只需将以下代码添加到ypur pom.xml并解决您的问题:

1
2
3
4
5
6
7
8
9
10
11
12
 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>


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

1
2
3
4
5
if("B".equals(string)) {
    //handle string being"B"
} else if("C".equals(string)) {
    //handle string being"C"
} else ...

有关切换的更多信息,请参阅Oracle教程。他们提到了Java7字符串功能:

In Java SE 7 and later, you can use a String object in the switch statement's expression.


在爪哇中,只能对字节、char、短或int进行切换,而不是对字符串进行切换。