如何解決 case expressions must be constant expressions

yangxi_001發表於2016-10-12
Android Library工程寫程式碼需要注意switch … case語句對資源id的引用,會引發編譯錯誤:case expressions must be constant expressions。

通常android工程生成的資源R.java,資源id宣告如下:

public static final int main=0x7f030004;
而對於library工程,資源id宣告如下:

public static int main=0x7f030004;
缺少了final,因此使用R.id 的switch … case語句會編譯失敗。

解決方法如下:
將switch … case替換成if … else語句。

for Eclipse

Eclipse中,游標定位在switch上,按Ctrl + 1(Command + 1 for Mac osx),選擇Convert ‘switch’ to ‘if-else’.

for Android studio

快捷鍵,Alt + Enter,選擇 Replace ‘switch’ with ‘if’.

如轉換前程式碼:

  1.     @Override
  2.     public void onClick(View v) {
  3.         switch (v.getId()) {
  4.         case R.id.btn_left:
  5.             hideSoftKeyboard();
  6.             finish();
  7.             break;

  8.         default:
  9.             break;
  10.         }
  11.     }
複製程式碼

轉換後程式碼:

  1.     @Override
  2.     public void onClick(View v) {
  3.         int id = v.getId();
  4.         if (id == R.id.btn_left) {
  5.             hideSoftKeyboard();
  6.             finish();
  7.         } else {
  8.         }
  9.     }
複製程式碼

相關文章