9

我正在尝试编译并收到此错误:

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

6 回答 6

11
switch(name)

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

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

选项:

  1. 您需要升级到 Java7
  2. 将 switch 语句更改为if/else
  3. 在 switch 中使用int而不是String
于 2012-09-20T21:43:30.210 回答
6

如果您使用的是 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>
于 2018-07-25T15:57:08.350 回答
4

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

于 2012-09-20T21:45:55.573 回答
1

如果您使用的是 maven,请按照以下方式更改 pom 中的构建,否则将 JDK 版本更改为 1.8+

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>
于 2021-07-01T09:22:02.417 回答
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教程。他们提到了 Java7 String 功能:

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

于 2012-09-20T21:44:10.417 回答
-1

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

于 2012-09-20T21:44:56.573 回答