我正在尝试编译,我收到此错误:
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;
}
答案 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进行切换,而不能对字符串进行切换。