【问题标题】:Android project using Eclipse gives error: Cannot switch on a value of type String for source level below 1.7使用 Eclipse 的 Android 项目出现错误:无法为低于 1.7 的源级别打开 String 类型的值
【发布时间】:2014-02-28 09:35:48
【问题描述】:

我正在使用 Eclipse 开发一个 android 项目,突然我开始收到此错误:

无法为低于 1.7 的源级别打开字符串类型的值。只允许可转换的 int 值或枚举变量。

我尝试了以前类似问题中的所有解决方案,但没有一个对我有用...

我已尝试在我的项目和所有项目中修复项目并将 JDK 合规级别设置为 1.7。

我正在使用 ADT Build:v22.2.1-833290 和 Eclipse:

String text = mService.getString();
switch (text) {
    case Protocols.REQUEST_SEND_MESSAGE:
        publishProgress("sent");
        break;
    case Protocols.RESPONSE_OK:
        mService.sendMessage("mesasage");   
        publishProgress("sent");  
        break;              
    default:
        break;
}

发生了什么事?

【问题讨论】:

  • 能否提供一些代码
  • 已添加代码,但我想@beworker 的回答是合乎逻辑的。我可以使用if / else

标签: java android eclipse switch-statement adt


【解决方案1】:

您正在尝试将 switch / caseString 对象一起使用,这仅在 Java 1.7 或更高版本中可用。 Android ADT 需要 Java 1.6。这意味着您不能将 switchString 构造一起使用。只需将其替换为 if / else

用这个替换你的代码。

String text=mService.getString();
if (Protocols.REQUEST_SEND_MESSAGE.equals(text)) {
    publishProgress("sent");
} else if (Protocols.RESPONSE_OK.equals(text)) {
    mService.sendMessage("mesasage");
    publishProgress("sent"); 
}

另一种选择是创建一个enum 并将所有协议常量放入其中。然后您将能够使用 switch / caseenum 值。

【讨论】:

  • 好的,非常感谢。但是有没有办法绕过这个错误?更新 ?还是插件?也许是新的 Eclipse 或 ADT 版本或更新?
  • 是的,我已经将它实现为if / else,但代码变得有点混乱,因为有更多的案例,所以我想通过switch 案例让它更整洁。感谢您的帮助。
  • 您必须一直将此代码重构为 if / else 直到 Android 开始支持 Java 1.7。没有其他选项可用。
  • 另一种选择是从协议常量创建一个枚举。然后你可以在 switch / case 中使用枚举值。但 Android 性能指南不建议使用枚举,因为它们会占用大量内存。
  • 我也会调查的。
【解决方案2】:

由于下面的答案提供了更多详细信息,String 对象的 switch 语句是 Java 1.7 中引入的一项新功能。不幸的是,Android 需要 1.6 或 1.5 版本。 :

https://stackoverflow.com/a/14367642/1572408

【讨论】:

  • 谢谢,有一个有用的链接可以稍后在该帖子中查看link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多