As of ADT 14, resource fields cannot be used as switch cases. Invoke this fix to get more informat

public static final int main=0x7f030004;
然而,截至ADT 14,他们将宣布如下:

public static int main=0x7f030004;

在R文件少了个final

换句话说,常量not final 在图书馆项目。原因很简单:当多个库项目相结合,实际值的字段(必须是唯一的)可能发生碰撞。ADT 14之前,所有字段都是决赛,所以作为一
个结果,所有库必须有他们所有的资源和相关的Java代码重新编译以及使用时的主要项目。这是糟糕的性能,因为它使构建非常缓慢。这也防止了分配库项目,不包括源
代码,限制了使用范围的库项目。
领域的原因不再是最后的是,它意味着库jar可以被编译一次,直接在其他项目中重用。以及允许分发二进制版本的库项目(进来r15),这使得更快的构建。


然而,它有一个影响图书馆的源代码。下面的代码形式将不再编译:


int id = view.getId();
switch (id) {
    case R.id.button1:
        action1();
        break;
    case R.id.button2:
        action2();
        break;
    case R.id.button3:
        action3();
        break;
}


这是因为开关语句需要所有case标签,比如 R.id.button1,在编译时保持恒定(这样值可以直接复制到 .class 文件)。
这个问题的解决方案非常简单:转换开关语句变成一个if - else语句。幸运的是,这是很容易在Eclipse中。只是把插入符号在开关的关键字,并按下ctrl - 1(或cmd 1在Mac):


在上面的场景中,它将把switch语句为:

int id = view.getId();
if (id == R.id.button1) {
    action1();
} else if (id == R.id.button2) {
    action2();
} else if (id == R.id.button3) {
    action3();
}


这通常是在UI代码和对性能的影响可以忽略不计。

我们有一个探测器,发现这些错误(不恒定case标签引用一个R字段),并提供一个简短的说明的问题(和指向这个页面获取更多信息。)

More information about the automatic detection.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值