【问题标题】:Switch statement with string as argument in Android在Android中以字符串作为参数的switch语句
【发布时间】:2012-02-14 19:30:45
【问题描述】:

我想使用 Java 1.7 中的 switch 语句,它也允许switch(someString)。但是,如果我将 java 编译器更改为 1.7,项目会中断,我要么必须回到 1.5,要么使用 android tools-> fix project

有没有办法在android开发中使用带字符串的switch?

【问题讨论】:

标签: java android switch-statement


【解决方案1】:

编辑

个人没试过,但是根据Android System Requirements的页面,是不支持的。也就是说,这并不意味着它不起作用,只是您不太可能从 Google/Android 获得关于该主题的太多/任何帮助。

JDK 5 或 JDK 6(仅 JRE 是不够的)

在一个潜在的积极方面,(在@Emil H 和他的评论的帮助下找到)我在网上找到了这些信息:

来自Dalvik on Wikipedia

程序通常用 Java 方言编写并编译为字节码。然后将它们从与 Java 虚拟机兼容的 .class 文件转换为与 Dalvik 兼容的 .dex(Dalvik 可执行文件)文件...

如果字节码没有从版本 6 更改到版本 7(不包括 @David Schwartz 提到的添加的 invokedynamicswitch 语句不应该使用。),那么它应该可以工作......

【讨论】:

  • 你确定吗?我认为 dex 编译器使用字节码。据我所知,java 7 并没有在字节码级别添加任何新内容......我可能错了......
  • @EmilH Java 7 至少将invokedynamic 添加到每个JSR292 的Java 字节码中。
  • @David Scwartz 是的,但是 Java 不使用它对吗?主要是在jvm上增加对Jython等动态语言的支持?
  • 优秀的分数。我已更新我的答案以反映此信息。
【解决方案2】:

您应该能够在 android 上使用 JDK7。检查相关问题的答案:

https://stackoverflow.com/a/7481063/355499

编辑:

在本地试用,JDK7 一切正常(这是我在开发时使用的)。但是,我找不到在我的 android 项目中将合规级别从 1.6 更改为 1.7 的方法。如果您真的想这样做,我想您将不得不求助于使用 Eclipse 以外的其他方式来构建您的项目。例如使用 ant 脚本或类似的脚本。不过,工作量可能比它的价值多一点。

【讨论】:

    【解决方案3】:

    目前不可能: 尽管在 Java 1.7 编译器中引入了带有 String 的 switch 语句,但不幸的是 Android 需要 1.6 或 1.5 版本。 所以我们必须等待。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多