首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenJDK 14.0.1给出“开关表达式没有覆盖所有可能的输入值”

基础概念

开关表达式(Switch Expressions)是Java 12引入的一项新特性,用于替代传统的switch语句。它提供了更简洁的语法和更好的性能。开关表达式要求每个可能的输入值都必须有一个对应的case分支,否则编译器会报错。

相关优势

  1. 简洁性:开关表达式的语法更简洁,减少了冗余代码。
  2. 类型安全:开关表达式在编译时进行类型检查,减少了运行时错误。
  3. 性能提升:开关表达式在某些情况下比传统的switch语句性能更好。

类型

开关表达式可以用于以下类型:

  • 基本数据类型(如int, char, byte, short, long
  • 枚举类型
  • 字符串
  • Java 12引入的switch表达式支持的类型(如int, long, short, byte, char, String, 枚举类型)

应用场景

开关表达式适用于需要根据不同条件执行不同操作的场景,例如:

  • 根据用户输入执行不同的操作
  • 根据不同的状态执行不同的逻辑
  • 根据不同的枚举值执行不同的代码块

问题原因

“开关表达式没有覆盖所有可能的输入值”这个错误是因为在开关表达式中,编译器检测到某些可能的输入值没有被处理。这通常发生在以下情况:

  1. 枚举类型:如果枚举类型有新的值添加,但没有在开关表达式中添加对应的case分支。
  2. 基本数据类型:如果使用了基本数据类型,但没有覆盖所有可能的值。
  3. 字符串:如果使用了字符串,但没有覆盖所有可能的字符串值。

解决方法

要解决这个问题,可以采取以下步骤:

  1. 检查所有可能的输入值:确保所有可能的输入值都有对应的case分支。
  2. 使用默认分支:在开关表达式中添加一个默认分支(default),以处理未覆盖的情况。

示例代码

假设我们有一个枚举类型Color,包含RED, GREEN, BLUE三种颜色:

代码语言:txt
复制
enum Color {
    RED, GREEN, BLUE
}

如果我们没有覆盖所有可能的输入值,编译器会报错:

代码语言:txt
复制
Color color = Color.RED;
int result = switch (color) {
    case RED -> 1;
    case GREEN -> 2;
    // 没有处理BLUE的情况
};

正确的做法是添加一个默认分支:

代码语言:txt
复制
Color color = Color.RED;
int result = switch (color) {
    case RED -> 1;
    case GREEN -> 2;
    case BLUE -> 3;
    default -> throw new IllegalStateException("Unexpected value: " + color);
};

参考链接

通过以上步骤,可以确保开关表达式覆盖所有可能的输入值,避免编译错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

B4A编程开发路线002_安装配置B4AIDE集成开发环境搭建

B4A官网上是这样概述这个开发工具:“B4A包括快速开发任何类型Android应用程序所需所有功能。B4A被来自世界各地数万名开发人员使用,包括NASA,HP,IBM等公司。...安装概述:第一步,是下载安装Oracle(甲骨文)公司JDK,推荐OpenJDK 14 + OpenJFX 14(jdk-14.0.1.zip),关于JDK在上一篇有介绍;第二步,下载安装google...否则可能会导致解压出错或丢失文件。解压工具(7z2301-x64.exe)。...1、下载安装OpenJDK 14 + OpenJFX 14 链接:OpenJDK 14 + OpenJFX 14(jdk-14.0.1.zip)。...我们可以操作B4A开发工具,通过菜单,【工具】➡【B4A Bridge】➡【连接】➡【新IP(N)】输入手机上《B4A-Bridge》显示“My IP”或者原来连接过IP进行连接。

84730

java线程安全问题

线程安全出现问题例子: 当多个线程同时操作一个变量时,可能会造成变量脏读脏写(类似于mysql) package com.company; public class Main {     public...最终值:19893 可看到 本来是20个线程*1000次递增,但是实际却小于20000,这个情况就属于非线程安全一种 如何实现线程安全?...而在多线程环境中, 程序执行可能因为指令重排而出现乱序 指令重排 指令重排是指在程序执行过程中, 为了性能考虑, 编译器和CPU可能会对指令重新排序. 原子性 子性是指一个操作是不可中断....    public void incA(){         a++;     }     public void setA(int a){         this.a = a;     } } 由于没有...,并且0++变成了1 但是其实在同一时刻,线程1-20都拿到了a=0,都++变成了1,就会导致线程写入覆盖,最后就会导致小于20000; AtomicIntegrer原子类 虽然volatile无法实现原子性

52550
  • 试用 GitLab 14 以及中国发行版:极狐

    时值 GitLab 14 大版本更新,官方对于这个版本给出了非常高评价,让我非常好奇,所以为了探究新版本到底有哪些变化,我对 GitLab 社区版、极狐版做了试用对比。...准备容器环境 为了保障测试过程相对顺畅,这里能使用官方镜像软件,直接使用官方镜像。而像暂时没有提供镜像极狐版,我会试着基于官方镜像进行容器镜像封装,尽可能避免折腾。...简单浏览 GitLab v14 界面功能 输入两次长度在8位以上相同密码后,我们就能使用管理员账号 root 和刚刚修改密码登陆系统了。.../ubuntu/focal/gitlab-jh_14.0.1-jh.0_amd64.deb 顺手看一下文件校验: c4ae070ac043c33b665ca42380dfc5ef473410e1cc6a5aa6f4a6177e432f6d66...gitlab-jh_14.0.1-jh.0_amd64.deb 既然极狐版本是 14.0.1 ,那么我们也优先使用 14.0.1 社区版镜像为基础环境进行尝试,直接使用 deb 包进行覆盖安装,来尽可能复用

    1.4K40

    最新Java JDK 21:全面解析与新特性探讨

    没有什么可以阻止代理更改应用程序外部代码,例如 JDK 本身中代码。JDK 5 要求在命令行上指定代理,以确保应用程序所有者批准使用代理。...与非分代 ZGC 相比,这些好处应该是可以实现,而不会显着降低吞吐量。 记录模式 (https://openjdk.org/jeps/440)JDK 19和JDK 20中预览,将解构记录。...除了较小编辑更改之外,自第二次预览以来主要更改是删除对增强for语句标题中出现记录模式支持。该功能可能会在未来 JEP 中重新提出。...目标包括扩大表达能力和适用性switch表达式和语句,允许模式出现在 case 标签中,允许在需要时放松历史空敌意,并通过要求模式语句覆盖所有潜在输入switch来提高语句安全性。...字符串模板、记录模式、开关模式匹配、未命名模式和变量以及未命名类和实例主方法来自Project Amber,该项目孵化了较小 Java 生产力功能。

    3.4K20

    软考高级架构师:语句覆盖、分支覆盖、判定覆盖和路径覆盖

    如果某个语句没有被执行,那么可能存在未发现错误。 2....判定覆盖(Condition Coverage) 定义:判定覆盖是指测试用例使每个条件中每个布尔表达式都取到过真(True)和假(False)。...通俗例子:在一个房间里有灯开关(布尔表达式),你要确保灯开和关两种状态都测试过。 解释:判定覆盖关注是每个条件中每个布尔表达式所有可能都被测试过,确保逻辑条件在不同情况下都能正确执行。...通俗例子:想象你在迷宫中,每条可能路径你都要走一遍,确保你探索了所有的路线。 解释:路径覆盖是最严格一种覆盖标准,它要求测试用例执行程序中所有可能路径。...分支覆盖:每个条件每个分支至少执行一次(开关每扇门)。 判定覆盖:每个条件每个布尔(True/False)至少执行一次(测试灯开关)。

    1.7K00

    Hi,Java 21 !

    通过支持模板及其嵌入式表达式验证和转换,提高了Java程序安全性,这些程序从用户提供组成字符串并将其传递给其他系统(例如,为数据库构建查询)。...允许创建从字面文本和嵌入式表达式计算非字符串,而无需通过中间字符串表示。 价值: 根据Amber项目的目标,字符串模板旨在使Java编程语言更可读、可写和可维护。...3、JEP 441: Pattern Matching for switch JEP目标: 通过允许模式出现在案例标签中,扩展了开关表达式和语句表达性和适用性。...允许在需要时放松切换历史性零敌意。 通过要求模式开关语句覆盖所有可能输入来提高开关语句安全性。...确保所有现有的交换机表达式和语句继续编译,不进行任何更改,并使用相同语义执行。

    1.5K121

    删除敏感信息删除大文件一句命令搞定(比官方文档还详细使用说明)

    克隆一个镜像仓库(git clone 命令加上 --mirror 参数) 这样,当你 git push 时候,会更新远端仓库所有引用 cd 到你要清理仓库路径根目录 如果你没有前往根目录,那么本文后面的所有命令最后面你都应该加上路径...可能需要解除保护 如果本文后面的命令你遇到了受保护提交,那么需要在所有命令后面加上 --no-blob-protection 参数 常见用法 使用 bfg 来清理仓库比 git 原生 git-filter-branch...注意,这里 expression-file.txt 名称是随便取,你可以取其他任何名称,只要在命令里输入正确名称(可能需要包含路径)就行。...每一个表达式后面可以加上 ‘==>’ 来指定匹配文件应该被替换成什么(如果没有指定,就会被替换成默认 ***REMOVED***。...每一个表达式后面可以加上 '==>' 来指定匹配文件应该被替换成什么(如果没有指定,就会被替换成默认 '***REMOVED***'。

    63040

    2.7w字!2021 最新版!Java基础面试题知识点总结!(上)

    Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle 和 OpenJDK 之间是否存在重大差异?...; 如果子类重写了父类方法,真正执行是子类覆盖方法,如果子类没有覆盖父类方法,执行是父类方法。...0,因为 finally 语句返回覆盖了 try 语句块返回。...InputStream/Reader: 所有输入基类,前者是字节输入流,后者是字符输入流。 OutputStream/Writer: 所有输出流基类,前者是字节输出流,后者是字符输出流。...Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle 和 OpenJDK 之间是否存在重大差异?

    80600

    JDK版本迭代(JDK9 - JDK20)

    此外,不仅会新增其他 API,还会有 API被删除(这在 Java 8 之前没有发生过)。...目前看这种发布策略是非常成功,解开了 Java/JVM 演进许多枷锁,至关重要是,OpenJDK 权力中心,正在转移到开发社区和开发者手中。...2017年9月起,所有版本免费 对语法支持 一致 一致 JEP JEP(JDK Enhancement Proposals):jdk 改进提案,每当需要有新设想时候,JEP可以提出非正式规范(specification...390: Warnings for Value-Based Classes 提供基于警告 392: Packaging Tool jpackage打包工具转正 393: Foreign-Memory...语法层面: 比如JDK5中自动拆箱、自动装箱、enum、泛型 比如JDK8中lambda表达式、接口中默认方法、静态方法 比如JDK10中局部变量类型推断 比如JDK12中switch 比如

    1.6K40

    JDK11升级JDK17最全实践干货来了

    给出结论: 1、JDK17相对于JDK8和JDK11,所有垃圾回收器性能都有很明显提升,特别是稳定版ZGC垃圾回收器 2、不论任何机器配置下,都推荐使用ZGC,ZGC停顿时间达到亚毫秒级,吞吐量也比较高...,转换完成后将通过表达式引擎解析表达式并取得正确,通过事件解析引擎解析用户自定义事件并完成事件绑定,完成解析赋值以及事件绑定后进行视图渲染,最终将目 2021年9月,Oracle宣布JDK17可以免费商用...https://www.oracle.com/hk/java/technologies/downloads/#java17 OracleJDK和OpenJDK这两个之间没有真正技术差别,因为针对Oracle...,转换完成后将通过表达式引擎解析表达式并取得正确,通过事件解析引擎解析用户自定义事件并完成事件绑定,完成解析赋值以及事件绑定后进行视图渲染,最终将目 5.1 JVM改进 1....,转换完成后将通过表达式引擎解析表达式并取得正确,通过事件解析引擎解析用户自定义事件并完成事件绑定,完成解析赋值以及事件绑定后进行视图渲染,最终将目 6.1 JDK选择 OpenJDK17下载

    1.5K10

    关于Java基础34个问题

    Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么Oracle和OpenJDK之间是否存在重大差异?...字符型常量和字符串常量区别 形式上: 字符常量是单引号引起一个字符 字符串常量是双引号引起若干个字符 含义上: 字符常量相当于一个整形( ASCII ),可以参加表达式运算 字符串常量代表一个地址...什么是方法返回?返回在类方法里作用是什么? 方法返回是指我们获取到某个方法体中代码执行后产生结果!(前提是该方法可能产生结果)。...(基本数据类型==比较,引用数据类型==比较是内存地址) equals() : 它作用也是判断两个对象是否相等。但它一般有两种使用情况: 情况1:类没有覆盖 equals() 方法。...它们也不一定是相等 因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖 hashCode() 默认行为是对堆上对象产生独特

    1.7K50

    【附答案】关于Java基础你不得不会34个问题

    Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么Oracle和OpenJDK之间是否存在重大差异?...字符型常量和字符串常量区别 形式上: 字符常量是单引号引起一个字符 字符串常量是双引号引起若干个字符 含义上: 字符常量相当于一个整形( ASCII ),可以参加表达式运算 字符串常量代表一个地址...什么是方法返回?返回在类方法里作用是什么? 方法返回是指我们获取到某个方法体中代码执行后产生结果!(前提是该方法可能产生结果)。...(基本数据类型==比较,引用数据类型==比较是内存地址) equals() : 它作用也是判断两个对象是否相等。但它一般有两种使用情况: 情况1:类没有覆盖 equals() 方法。...它们也不一定是相等 因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖 hashCode() 默认行为是对堆上对象产生独特

    47830

    关于Java基础你不得不会34个问题

    Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么Oracle和OpenJDK之间是否存在重大差异?...字符型常量和字符串常量区别 形式上: 字符常量是单引号引起一个字符 字符串常量是双引号引起若干个字符 含义上: 字符常量相当于一个整形( ASCII ),可以参加表达式运算 字符串常量代表一个地址...什么是方法返回?返回在类方法里作用是什么? 方法返回是指我们获取到某个方法体中代码执行后产生结果!(前提是该方法可能产生结果)。...(基本数据类型==比较,引用数据类型==比较是内存地址) equals() : 它作用也是判断两个对象是否相等。但它一般有两种使用情况: 情况1:类没有覆盖 equals() 方法。...它们也不一定是相等 因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖 hashCode() 默认行为是对堆上对象产生独特

    95520

    java面试(基础-1)

    Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么Oracle和OpenJDK之间是否存在重大差异?...形式上: 字符常量是单引号引起一个字符; 字符串常量是双引号引起若干个字符 含义上: 字符常量相当于一个整型( ASCII ),可以参加表达式运算; 字符串常量代表一个地址(该字符串在内存中存放位置...什么是方法返回?返回在类方法里作用是什么? 方法返回是指我们获取到某个方法体中代码执行后产生结果!(前提是该方法可能产生结果)。...0,因为finally语句返回覆盖了try语句块返回。...InputStream/Reader: 所有输入基类,前者是字节输入流,后者是字符输入流。 OutputStream/Writer: 所有输出流基类,前者是字节输出流,后者是字符输出流。

    59060

    在CentOS中搭建Hadoop

    搭建说明:第一次搭建 Hadoop 小伙伴,请严格按照文章中软件环境和步骤搭建,不一样版本都可能会导致问题。...有的 CentOS 6.4 默认安装了 OpenJDK 1.7,这里我们可以使用命令检查一下,和 Windows 下命令一样,还可以查看 JAVA_HOME 这个环境变量。...# 查看 $JAVA_HOME 这个环境变量 如果系统没有安装 OpenJDK,我们可以通过 yum 包管理器来安装。...(安装过程中会让输入 [y/N],输入 y 即可) yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel #安装 openjdk1.8.0...我们这里来运行一个查询例子,将 input 文件夹作为输入文件夹,筛选当中符合正则表达式 dfs[a-z.]+ 单词,统计它次数,将筛选结果输出到 output 文件夹中。

    1.9K30

    2.7w字!2021 最新版!Java基础面试题知识点总结!(上)

    Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle 和 OpenJDK 之间是否存在重大差异?...某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃问题,但是,只需切换到 Oracle JDK 就可以解决问题; 在响应性和 JVM 性能方面,Oracle JDK 与 OpenJDK...; 如果子类重写了父类方法,真正执行是子类覆盖方法,如果子类没有覆盖父类方法,执行是父类方法。...0,因为 finally 语句返回覆盖了 try 语句块返回。...InputStream/Reader: 所有输入基类,前者是字节输入流,后者是字符输入流。 OutputStream/Writer: 所有输出流基类,前者是字节输出流,后者是字符输出流。

    45410

    2.7w字!Java基础面试题知识点总结!(2021 最新版)

    Oracle JDK 和 OpenJDK 对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle 和 OpenJDK 之间是否存在重大差异?...某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃问题,但是,只需切换到 Oracle JDK 就可以解决问题; 在响应性和 JVM 性能方面,Oracle JDK 与 OpenJDK...; 如果子类重写了父类方法,真正执行是子类覆盖方法,如果子类没有覆盖父类方法,执行是父类方法。...0,因为 finally 语句返回覆盖了 try 语句块返回。...InputStream/Reader: 所有输入基类,前者是字节输入流,后者是字符输入流。 OutputStream/Writer: 所有输出流基类,前者是字节输出流,后者是字符输出流。

    54420

    推荐一个生产环境问题排查利器

    ,也就是说所有当前类子类也会被搜索出来,想要精确匹配,请打开options disable-sub-class true开关 ❞ 1、查看类静态变量信息 sc -df 类全限定名 ?...执行表达式 [c:] 执行表达式 ClassLoader hashcode,默认是SystemClassLoader [x] 结果对象展开层次,默认1 1、调用静态函数 ognl...这个时候如果能记录下当时方法调用所有入参和返回、抛出异常会对整个问题思考与判断非常有帮助。 于是乎,TimeTunnel 命令就诞生了。...但他能帮助你简单标记当前执行方法类实体 CLASS 执行类名 METHOD 执行方法名 (19)options 全局开关 名称 默认 描述 unsafe false 是否支持对系统级别的类进行增强...,打开该开关可能导致把JVM搞挂,请慎重选择!

    74730

    《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第7章 实现

    程序中没有预先输入T “N=0"应该是"MATCH=0” 第3题 3.在第2题设计中若输入N或KEYWORD不合理,会发生问题。 (1) 给出这些变量不合理例子。...预期输出:X=10,Y=20,Z=30 路径覆盖测试用例 本程序共有8条可能执行通路,为做到路径覆盖总共需要8组测试数据。...下面是实现路径覆盖典型测试用例: ①3个判定表达式全为假 输入:A=1,B=1,C=1 预期输出:X=1,Y=2,Z=3 ②3个判定表达式依次为假、假、真 输入:A=1,B=1,C=60...,size小于数组大小,并给出需要查找,该在somearray中; 预期输出:返回-1; ⑤首先给出某个数组somearray和size,size大于数组大小,并给出需要查找,该不在...显然,强迫执行将遍历程序图所有路径,然而由于各个条件表达式之间存在相互依赖关系,这些路径中某一些在自然执行时可能永远也不会进入。

    1.8K10

    Linux CentOS 7.0中java安装与配置环境变量步骤详解

    因为centOS 7.0自带JDK压根就没有这些jar包,所以不管你环境变量配置正确与否,“javac”命令也不能用,因为这个命令依赖tool.jar这个jar包。...可能选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose...-sourcepath 指定查找输入源文件位置 -bootclasspath 覆盖引导类文件位置 -extdirs 覆盖所安装扩展位置 -endorseddirs... 覆盖签名标准路径位置 -proc:{none,only} 控制是否执行注释处理和/或编译。...-A关键字[=] 传递给注释处理程序选项 -X 输出非标准选项提要 -J 直接将 传递给运行时系统 -Werror 出现警告时终止编译 @ 从文件读取选项和文件名

    2.6K41
    领券