Android switch语句报错Constant expression required

方案一 :可以用 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,也能解决问题。
Android switch语句报错Constant expression required的更多相关文章
- android switch语句报错:case expressions must be constant expressions
今天无意中碰见了 case expressions must be constant expressions 的问题 写了一个 switch(item.getItemId()) { case R. ...
- (转)android import library switch语句报错case expressions must be constant expressions
今天当我从github上下载一个工程,并把它的库文件导入eclipse中,发现switch语句报错case expressions must be constant expressions : 解决方 ...
- Constant expression required
switch 语句编译报错Constant expression required 问题:case语句后面必须是常量,使用final修饰 public static final int NotifyT ...
- mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg
mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg ...
- ubuntu18.04 下启动Android Studio报错KVM is required to run this AVD. /dev/kvm device: permission denied.
在ubuntu18.04下安装Android Studio,安装了模拟器后运行报错 KVM is required to run this AVD. /dev/kvm device: permissi ...
- react native-调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错
调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错,而在iOS上运行没问题.原因是因为接口是有验证信息的,而调用这个插件时没有传入,在iOS上会自动加 ...
- mysql报错Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage
mysql报错Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage 在执行cr ...
- 【mybatis】【mysql】mybatis查询mysql,group by分组查询报错:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
mybatis查询mysql,group by分组查询报错:Expression #1 of SELECT list is not in GROUP BY clause and contains no ...
- 解决Mysql搭建成功后执行sql语句报错以及区分大小写问题
刚搭建完mysql 8.0以后会: 一.表区分大小写, 二.执行正确的sql语句成功且会报:[Err] 1055 - Expression #1 of ORDER BY clause is not i ...
- android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:
android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 问题原因: ...
随机推荐
- P7900 [COCI2006-2007#2] SJECIŠTA_题解
[COCI2006-2007#2] SJECIŠTA_题解 rt 我们来看一下题目描述 考虑一个有 \(n\) 个顶点的凸多边形,且这个多边形没有任何三个(或以上) 的对角线交于一点. 这句话什么意思 ...
- 强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战
强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa.Qlearning:蒙特卡洛策略.时序差分等以及Qlearning项目实战 1.核心词汇 概率函数和奖励函数:概率函数定量地 ...
- C++界面库(十几种,很全)
C++界面库是用于GUI界面设计的工具包,可以帮助开发人员快速开发出美观.易用的界面.在选择C++界面库的时候,开发人员需要根据项目要求.使用场景.开发难易程度以及所适配的操作系统等因素进行综合考虑. ...
- java判断系统时间是否在规定的时间区间之内
java判断系统时间是否在规定的时间区间之内 1️⃣ 创建controller => service => serviceimpl package com.preciouslove.xin ...
- 零基础入门学习Java课堂笔记 ——day01
Java语法 1.注释.标识符.关键字 注释 不会被程序执行的代码或者块 //双斜杠表示单行注释 /*表示多行注释*/ 标识符.关键字 关键词系统事先定义好的,我们能直接拿来用的,不能作为变量名使用 ...
- .NET Core开发实战(第34课:MediatR:轻松实现命令查询职责分离模式(CQRS))--学习笔记(下)
34 | MediatR:轻松实现命令查询职责分离模式(CQRS) 实际上我们在定义我的查询的时候,也可以这样定义,例如我们定义一个 MyOrderQuery,把订单的所有名称都输出出去 namesp ...
- 扩展说明: 指令微调 Llama 2
这篇博客是一篇来自 Meta AI,关于指令微调 Llama 2 的扩展说明.旨在聚焦构建指令数据集,有了它,我们则可以使用自己的指令来微调 Llama 2 基础模型. 目标是构建一个能够基于输入内容 ...
- ES6学习 第四章 字符串的新增方法
前言 本章介绍字符串对象的新增方法.不常用的方法不做重点笔记. 本章原文链接:字符串的新增方法 includes().startsWith().endsWith() 确定一个字符串是否包含在另一个字符 ...
- Python 中获取文件名
Python 获取文件名import osimport sys # ①获取当前文件名os.path.basename(__file__)# ②获取程序启动文件名os.path.basename(sys ...
- 计算机算法设计与分析(第5版)PDF
<计算机算法设计与分析(第5版)>是2018年电子工业出版社出版的图书,作者是王晓东. 整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法. 网 ...