将开关更改为“if-else”语句

时间:2011-12-06 01:33:02

标签: java android switch-statement

我最近对编程感兴趣,我想为手机或平板电脑创建Android应用。从几乎没有了解java / xml之后的几周内我走了很长一段路。我对此非常认真。我会以某种方式找到这个问题的答案。事实上,我希望在任何人回答这个问题之前弄清楚它。我已经解决了许多问题,而没有诉诸任何人,但我只是坚持这个问题太久了。我想我会试一试。

我正在使用较旧的教程来构建练习Twitter应用程序(这些教程似乎无处不在,这就是我选择它的原因)。我正在使用Eclipse作为编辑器。

以下是本教程中的代码示例。这与我的问题有关:

@Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.timeline);

显然,自ADT 14介绍以来,您不能再使用(R.layout.timeline)短语,错误消息将其称为“switch语句”。

现在,在我在其他网站上发现的帖子中,有类似问题的人使用ctrl + 1显示了Eclipse中“快速修复”的屏幕截图。在屏幕截图中,弹出的修复程序显示“将switch切换为'if-else'语句。”我的Eclipse版本中没有弹出此修复程序。我的快速修复选项是“迁移Android代码”,“在'布局''中创建字段'时间轴',”在'布局'类型中创建常量'时间轴'或“在文件中重命名”。

如果我选择“迁移Android代码”,会弹出一个窗口,通知我ADT 14更新,以及库项目中不再允许使用switch语句。它说要将switch语句转换为“if-else”语句,按ctrl + 1进行快速修复,然后选择“切换到'if-else'语句”,就像在我找到的屏幕截图中一样。但是,当我这样做时,该选项不会弹出。

我更愿意知道代码中需要更改的内容,而不知道如何弹出正确的快速修复程序。如果不是太麻烦,解释为什么这些变化确实是有效的将是非常有帮助的。我现在在我的java文件中有很多(很多)错误,但是大多数都是由于不同形式的这个确切问题。如果我能在前面/后面看到一个,我可能会在没有解释的情况下从那里看出来。但是经过几个小时的搜索,到目前为止我还没有通过谷歌搜索找到它。

提前非常感谢....

为了记录,我在任何java文件中都没有看到任何切换类,如果这对答案有所帮助......

7 个答案:

答案 0 :(得分:14)

请务必点击switch关键字,然后按 Ctrl + 1
起初这让我很困惑......

如果它仍未显示,您使用的是哪个版本的Eclipse?

如果您使用的是Mac,请选择关键字switch,然后点击 Shift + 命令 + 1
这会显示将switch更改为if else条件的提示。

答案 1 :(得分:2)

我一直有同样的问题。对我来说,我正在启用view.getId()。在切换之前,声明int id = view.getId();.然后切换id。然后你可以按住Ctrl + 1点击并弹出“转换到If / Else”转换。

他们进行了此更改以降低构建速度。我的项目现在大约有1/10的时间。我很高兴我升级了ADT。

答案 2 :(得分:1)

出现问题是因为 ADT 14 资源标识符不再是最终的。 您可以使用 if-else 语句更改 switch 语句的快速解决方案。

使用 Android Studio 4.1.3

步骤:1。只需右键单击语句的 switch 关键字。

步骤:2 点击第一个选项显示上下文操作。

步骤:3 单击将 switch 替换为 if

完成

答案 3 :(得分:0)

对我而言,您似乎没有时间轴资源。

分解 R.layout.timeline

R 是指 资源

布局是指应用程序中的布局集合

时间轴是指您尝试应用 setContentView()的特定资源。

如果我的预感是正确的,那么您没有时间轴资源。 在eclipse中的布局文件夹中创建一个新的XML文件,并将其命名为“timeline” 这应该可以解决这个问题。

答案 4 :(得分:0)

我希望你能把事情搞定。

我同意这听起来像是一些奇怪的Eclipse错误,而不是它看起来的错误,而不是Quick Fix所说的错误。众所周知,Eclipse不时撒谎。清理您的项目(如@Stephen Dubya所说),删除有问题的代码,保存文件,将其重新粘贴,然后再次保存......这些是一些非常明显的技巧,有时会让Eclipse表现出来。

总的来说,我认为对switch final之类的Java basics更加熟悉是件好事。我认为这将使您对Android的学习变得更加容易。尽管工具和文档在不断改进,但Android仍然很年轻,并且使用教程并不总是易于学习,特别是当您不习惯编写代码或使用Eclipse等复杂的IDE时。

但我离题了。仅在Android library projects ,而不是常规项目中,Android不会将resources视为常量(R.layout.timeline变量),因为ADT 14.这意味着意味着在库项目中,您不能在switch语句中使用switch或类似的资源变量。您只能if-else整数或枚举值。

无论如何,始终使用switch可能是您最好的选择。 switch可以,尤其是对于初学者,会导致代码中的逻辑错误,并且可以使用if-else块重写您使用switch编写的任何内容。就个人而言,我已经完全停止在Android和其他Java代码中使用{{1}}。

答案 5 :(得分:0)

您需要将诅咒放在单词开关中的s之前,然后按下cmd 1。如果switch语句具有fall-through子句,则转换选项将不可用。

答案 6 :(得分:0)

不知怎的,我过度劳累了这个错误。我已从工作区删除了我的项目。将它的.project文件恢复为SVN提交的旧文件。然后在Eclipse卸载ADT并再次安装它。然后导入我的项目。 - >库以旧方式添加,因此R.java的所有字段现在都是最终的。希望这会有所帮助。