您的位置 首页 动态

android官方技能文档翻译――Case 标签中的常量字

Case 标签中的常量字段在正常的 Android 项目中,资源R类里的常量是这样声明的: public static final int main=0x7f030004;然而,到 ADT 14为止,

Case 标签中的常量字段

在正常的 Android 项目中,资源R类里的常量是这样声明的: public static final int main=0x7f030004;

但是,到 ADT 14停止,在类库项目中,他们会被这样声明: public static int main=0x7f030004;

换句话说,在库项目中这些常量都不是final的。原因很简单:当多个库项目整合时,字段的实践值(有必要是仅有的)可能会呈现磕碰。在ADT 14 之前,一切这样的字段都是final的,所以导致一切的库被运用的时分,主项目有必要编译他们的一切资源和相关 Java 代码。这样的功能是很差的,由于它使构建的速度十分慢。它还阻止了不包括源代码的库项目的分发,约束库项目的运用范围。

字段不再是 final 的原因是意味着库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; }

这是由于switch句子需求一切case的标签,如R.id.button1,在编译时是个常量 (这样值能够直接复制到.class 文件中)。

为此解决方案很简单: 将 switch 句子转化成 if-else 句子。走运的是,这在 Eclipse 中操作起来很简单。只需求将刺进符号放在switch关键字上,并按 Ctrl+1 (在Mac上是 Cmd+1):

\
加载中...

在上述场景中,它将把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 代码中,而且它对功能的影响能够忽略不计。

咱们有一个检测器,能够发现这些过错 (引证R字段的十分量 case 标签),并供给问题的扼要阐明 (并指向此页面以获取详细信息。) 有关自动检测的详细信息。

P.S. 假如你的 switch 句子如下所示:

switch (view.getId()) {

那么成果会转化成每一个if查看都重复调用 view.getId() 的功率低下的if/else链。你需求先提取此表达式 (运用“提取本地变量(Extract Local Variable)”的重构快捷键键),然后再转化这条 switch 句子。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/300495.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部