Android switch語句報錯Constant expression required

Bytezero!發表於2024-02-27

方案一 :可以用 if來替代 如下

原因:在Android Studio中使用JDK17以上版本,會出現switch語句報錯"Constant expression required"的問題,這是因為在JDK17中switch語句的條件表示式支援使用列舉型別,而這個特性還沒有被支援。

方案2:換JDK版本

因為JDK17暫時不支援這個特性,可以換成17以下版本可以,JDK8和JDK11都可以

方案3:使用列舉替換

不過這個太麻煩,不太推薦

首先,建立一個列舉類,用於表示不同的按鈕。例如:

1 public enum ButtonType {
2     BTN_ALERT,
3     BTN_OTHER1,
4     BTN_OTHER2,
5     // 新增更多按鈕型別
6 }

接下來,在你的Activity或Fragment中,宣告一個成員變數來表示當前按鈕的型別:

1 private ButtonType currentButtonType;

然後,將列舉型別與按鈕關聯起來。你可以使用Map來將按鈕的資源ID與列舉型別進行對映。在Activity的onCreate方法中,或者Fragment的onCreateView方法中,進行如下操作:

 1  Map<Integer, ButtonType> buttonTypeMap = new HashMap<>();
 2 buttonTypeMap.put(R.id.bnt_alert, ButtonType.BTN_ALERT);
 3 buttonTypeMap.put(R.id.bnt_other1, ButtonType.BTN_OTHER1);
 4 buttonTypeMap.put(R.id.bnt_other2, ButtonType.BTN_OTHER2);
 5 // 新增更多按鈕型別的對映
 6 
 7 // 設定按鈕的點選事件
 8 findViewById(R.id.bnt_alert).setOnClickListener(v -> onButtonClick(ButtonType.BTN_ALERT));
 9 findViewById(R.id.bnt_other1).setOnClickListener(v -> onButtonClick(ButtonType.BTN_OTHER1));
10 findViewById(R.id.bnt_other2).setOnClickListener(v -> onButtonClick(ButtonType.BTN_OTHER2));
11 // 新增更多按鈕的點選事件

最後,在你的Activity或Fragment中實現onButtonClick方法,根據列舉型別來執行相應的邏輯:

 1 private void onButtonClick(ButtonType buttonType) {
 2     // 根據按鈕型別執行相應的邏輯
 3     switch (buttonType) {
 4         case BTN_ALERT:
 5             // 處理 BTN_ALERT 按鈕點選事件
 6             break;
 7         case BTN_OTHER1:
 8             // 處理 BTN_OTHER1 按鈕點選事件
 9             break;
10         case BTN_OTHER2:
11             // 處理 BTN_OTHER2 按鈕點選事件
12             break;
13         // 處理更多按鈕型別的點選事件
14     }
15 }

透過這種方式,你可以使用列舉型別來表示不同的按鈕,並在點選事件中使用列舉型別,而不是直接使用資源ID,也能解決問題。

相關文章