Android 开辟解决 switch 语句报错 Constant expression required 问题 ...

打印 上一主题 下一主题

主题 684|帖子 684|积分 2052


title:Android 开辟解决 switch 语句报错 Constant expression required 问题

Android 开辟解决 switch 语句报错 Constant expression required 问题


  
   背景:当我利用新版本(2023.3.4)的 IDEA 举行 Android 开辟的时候,想要给多个 button 控件设置监听器,要根据差别findViewById(button) 举行操作时,利用了 switch 语句举行分类,但是 idea 举行情况报错,constant expression required
  报错体现

可以看到,当利用 switch 语句举行判断时,在 case 后面的语句中出现 Constant expression required 的报错

解决方案

一、 利用 if-else 举行 switch 语句替换

我们可以将上述 switch 代码修改为 if-else 的,举行等价替换,消除问题。
  1. @Override
  2. public void onClick(View v) {
  3.     int viewId = v.getId();
  4.     if (viewId == R.id.button_1) {
  5.         Toast.makeText(MainActivity.this, "您好已经连接上了1", Toast.LENGTH_SHORT).show();
  6.     } else if (viewId == R.id.button_2) {
  7.         Toast.makeText(MainActivity.this, "您好已经连接上了2", Toast.LENGTH_SHORT).show();
  8.     } else if (viewId == R.id.button_3) {
  9.         Toast.makeText(MainActivity.this, "您好已经连接上了3", Toast.LENGTH_SHORT).show();
  10.     }
  11. }
复制代码
二、 修改 gradle.properties 使语句允许 switch 利用

如果实在是需要利用 switch 语句举行规范化,可以找到项目级别文件 gradle.properties
Step-1: gradle.properties 示比方下
显然,后面有(Project Properties) 体现的是工程级别的配置文件

Step-2:在文件末尾增加代码 android.nonFinalResIds=false

Step-3:刷新 gradle,点击上方的刷新按钮

Step-4:发现报错已经消散,但是变成了 warning,报错信息的翻译如下,说的是 因为资源 id 不是用 final 修饰的,以是会带来编译服从的降低,不太建议利用,这个也确实是很有原理的,但是我选择无视这个风险。
   在Android Gradle Plugin version 8.0中,资源id默认为非final,避免在switch case语句中利用它们。(Ctrl + F1)
巡检信息:避免利用需要常量表达式的资源id。Android Gradle Plugin的未来版本将生成带有非常量id的R类,以提高增量编译的性能。
  

Step-5:加上 @SuppressLint("NonConstantResourceId") 注解消除 warning
   Tips:@SuppressLint("NonConstantResourceId") 是 Android Studio 或 IntelliJ IDEA 中的一个注解,紧张用于克制特定的 Lint(代码静态检查工具)警告。
  在 Android 开辟中,Lint 通常会建议开辟者确保全部利用的资源 ID 都是常量,如许可以避免潜在的运行时错误,因为非常量资源 ID 可能会导致编译器优化失败大概在运行时找不到对应的资源。因此,当你直接从 R  类引用资源 ID 时,IDE 默认期望它是 final static 的。
  然而,在某些情况下,可能由于项目需求大概特别场景,你需要动态获取资源 ID 并举行处置惩罚,这时就可能会触发 “ResourceType” 非常量的 Lint 警告。
  @SuppressLint("NonConstantResourceId") 注解的作用就是告诉 Lint 工具忽略这种特定类型的警告,允许你在代码中利用非常量资源 ID,但请留意这可能会增加潜在的运行时风险。在利用此注解前,请确保你相识其背后的风险并有充分的理由如许做。
  

好的,现在我们完全可以利用 switch 了,但是还是得提示一下在座各位,如许修改有风险,可能某天步伐报错的时候,就是你本日埋下来的大坑!!
参考文章


  • 【已解决】switch语句报错Constant expression required
  • constant expression required
  • 【Java】Constant expression required
  • Android enum Constant expression required问题解决

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表