Java Switch语句给出了不兼容的类型错误
我正在尝试编译,但出现以下错误:Java Switch语句给出了不兼容的类型错误,java,switch-statement,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": conve
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
带字符串的语句仅从Java7开始受支持
我猜您使用的编译器版本低于Java7
选项:
if/else
int
,而不是String
除非有Java7+,否则不能切换字符串实例,只能切换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字符串功能:
在JavaSE7和更高版本中,可以在switch语句的表达式中使用String对象
在Java中,只能对字节、字符、短字符或int进行切换,而不能对字符串进行切换。switch从Java 7接受字符串在java 7之前只有与int兼容的类型(short、byte、int、char)可以作为开关参数传递如果您使用的是maven project,那么只需将以下代码段添加到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>
org.apache.maven.plugins
maven编译器插件
1.8
1.8
您需要将java升级到Java7,如果仍然失败,它可能是您的IDE。对于intelliJ,请转到File>Project Structure>Project>Project Language Level
并设置为7及以上,除非您使用的是Java 7或更高版本-请参阅其他答案。@user1514362您的意思是什么?我给你举了一个例子,它不使用switch语句,但执行相同的操作。这不是你想要的吗?你必须删除你的switch语句才能使它工作。对此我真的很抱歉。我一直试图取消这一否决票,它告诉我,我不允许改变我的投票。这是一个意外的否决票,有撤销吗?@krico我刚刚编辑了我的帖子,你现在可以恢复你的否决票了……)看起来Maven被困在中世纪了。我从未想过,像标准JavaAPI这样显而易见的东西应该通过在maven pom文件中添加一些行来显式启用。这很管用,谢谢!
<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>