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以后才支持带字符串的
我猜您使用的编译器版本低于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进行切换,而不是对字符串进行切换。