【问题标题】:Switch Statement gives Incompatible Types errorSwitch 语句给出不兼容的类型错误
【发布时间】:2012-09-13 08:01:58
【问题描述】:

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

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

【问题讨论】:

    标签: java switch-statement


    【解决方案1】:
    switch(name)
    

    仅从 Java7 开始支持带有字符串的switch 语句。

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

    选项:

    1. 您需要升级到 Java7
    2. 将 switch 语句更改为 if/else
    3. 在开关中使用int 而不是String

    【讨论】:

    • 你需要将你的java升级到Java7
    • 如果这仍然失败,它可能是你的 IDE。对于 intelliJ,请转到 File > Project Structure > Project > Project Language Level 并设置为 7 及以上
    【解决方案2】:

    除非你有 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 对象。

    【讨论】:

    • @user1514362 你什么意思?我给了你一个不使用 switch 语句但执行相同操作的示例。这不是你想要的吗?您必须删除您的 switch 语句才能使其工作
    【解决方案3】:

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

    【讨论】:

    • 除非您使用 Java 7 或更新版本 - 请参阅其他答案。
    【解决方案4】:

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

    【讨论】:

    • 对此我感到非常抱歉。我一直试图删除这个反对票,它告诉我不允许我改变我的投票。这是一个意外的反对票,有撤消吗?
    • @krico 我刚刚编辑了我的帖子,你现在可以恢复你的反对票了.. :)
    【解决方案5】:

    如果您使用的是 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>
    

    【讨论】:

    • 看起来 Maven 陷入了中世纪。我从来没有想过应该通过在 maven pom 文件中添加一些行来显式启用像标准 java API 这样明显的东西。它的工作原理,谢谢!
    【解决方案6】:

    如果您使用的是 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-26
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多