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

 switch(name) 

仅从Java7开始支持带有String的switch语句。

我猜你使用的编译器版本比Java7少

选项:

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

switch 从java 7接受String在java 7之前,只有int兼容的类型(short,byte,int,char)可以作为switch参数传递

除非你有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 教程 。 他们提到了Java7 Stringfunction:

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

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

     org.apache.maven.plugins maven-compiler-plugin  1.8 1.8     

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