As of ADT 14, resource fields cannot be used as switch cases.

http://blog.csdn.net/f330656066/article/details/9241163


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.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章