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

选项:

  • 您需要升级到Java7
  • 将switch语句更改为
    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>