首页
学习
活动
专区
工具
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进行连接。

98830

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无法实现原子性

52750
  • 试用 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.7K20

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

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

    2.2K00

    Hi,Java 21 !

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

    1.6K121

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

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

    71740

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

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

    80800

    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.7K40

    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.7K10

    关于Java基础的34个问题

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

    1.7K50

    java面试(基础-1)

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

    59160

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

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

    47930

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

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

    95920

    在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字!Java基础面试题知识点总结!(2021 最新版)

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

    54620

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

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

    45710

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

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

    77130

    《软件工程导论第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.9K10

    Java 近期新闻:JDK 19 的 JEPs、 Lilliput 的里程碑版本、Spring 框架、Quarkus 2.9.0

    OpenJDK 甲骨文(Oracle)的 Java 平台组首席架构师 Mark Reinhold 提议将当前的openjdk.java.net域名迁移到openjdk.org。...对 JEP 420 进行的更改包括:用switch块中的when子句替换守护模式(Guarded Patterns);当选择器表达式的值为null时,模式开关的运行时语义与遗留开关的语义更加一致。...在通往 Spring Framework 6.0.0 的道路上,第四个里程碑版本已经发布,其中包括了对 5.3.20 版本的所有修复以及 39 个修复和改进,其中包括:删除了过时的NestedIOException...云服务检索特性值的能力。...该版本在 JDK 11 或 JDK 17 上可能能运行,但是对 JDK 8 的支持已经停止。

    2.2K30
    领券