一、枚举类型——新特性(将 switch 作为表达式)

news2024/9/20 21:37:06

switch 一直以来都只是一个语句,并不会生成结果。 JDK 14 使得 switch 还可以作为 一个表达式来使用,因此它可以得到一个值:

SwitchExpression.java

public class SwitchExpression {
    static int colon(String s) {
        var result = switch (s) {
            case "i":
                yield 1;
            case "j":
                yield 2;
            case "k":
                yield 3;
            default:
                yield 0;
        };
        return result;
    }

    static int arrow(String s) {
        var result = switch (s) {
            case "i" -> 1;
            case "j" -> 2;
            case "k" -> 3;
            default -> 0;
        };
        return result;
    }

    public static void main(String[] args) {
        for (var s : new String[]{"i", "j", "k", "z"}) {
            System.out.format("%s %d %d%n", s, colon(s), arrow(s));
        }
    }
}

运行结果如下:

在这里插入图片描述

如 colon() 中所示,在使用旧的冒号语法的同时,可以使用新的 yield 关键字从 switch中 返回结果。注意在使用 yield 的时候,并不需要用到 break ——实际上如果加上了 break,反而会在编译时产生错误消息“试图跳出switch表达式”(attempt to break out of a switch expression)。

如果试图在 switch 语句中使用 yield,编译器会产生错误消息“在 switch 表达式外部 yield ”(yield out side of switch expression)。

arrow() 会产生和 colon() 相同的效果,但是要注意这样的语法会更清晰、更紧凑,也更易读。可以看看这种方式为 TrafficLight.java 带来的改进(相较于在本章前面实现的版本):

EnumSwitch.java

public class EnumSwitch {
    enum Signal {GREEN, YELLOW, RED,}

    Signal color = Signal.RED;

    public void change() {
        color = switch (color) {
            case RED -> Signal.GREEN;
            case GREEN -> Signal.YELLOW;
            case YELLOW -> Signal.RED;
        };
    }
}

同样,如果在不加上 case BLUE 的情况下将 BLUE 加入到 enum Signal 中,Java的反应则是“switch 表达式并未覆盖所有可能的输人值”(the switch expression does not cover all possible input values)。编译器会确保在修改代码的时候不会缺少case。

如果一个case需要多个语句或表达式,那就将它们放在一对花括号中。

Planets.java

enum CelestialBody {
    MERCURY, VENUS, EARTH, MARS, JUPITER,
    SATURN, URANUS, NEPTUNE, PLUTO
}

public class Planets {
    public static String classify(CelestialBody b) {
        var result = switch (b) {
            case MERCURY, VENUS, EARTH,
                    MARS, JUPITER,
                    SATURN, URANUS, NEPTUNE -> {
                System.out.print("A planet: ");
                yield b.toString();
            }
            case PLUTO -> {
                System.out.print("Not a planet: ");
                yield b.toString();
            }
        };
        return result;
    }

    public static void main(String[] args) {
        System.out.println(classify(CelestialBody.MARS));
        System.out.println(classify(CelestialBody.PLUTO));
    }
}

运行结果如下:

A planet: MARS
Not a planet: PLUTO

注意,在从多行代码组成的 case 表达式中生成结果时,即便使用了箭头语法,也要使用 yield。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于单片机的智能点滴速度输液液体检测

功能介绍 以51单片机作为主控系统;显示液位,滴数,温度等信息;通过水位传感器检测当前药瓶是否有水;通过滴速传传感器利用单片机定时器计算当前滴速;通过DS18B20温度传感器采集当前药液温度,继电…

【前端】JS语法——数据类型转换

一、字符串&#xff08;里面必须数字&#xff09;转换为数字类型&#xff08;number&#xff09; 1、强制转换&#xff1a;(parseInt()、parseFloat()、Number())&#xff1b; 2、隐式转换&#xff08;number[-/*%]string&#xff09;&#xff1b; <script>let s &qu…

红米K60刷入MIUI.EU安装面具magisk与root教程

文章目录 前言1.解锁BootLoader2.刷入Recovery3.刷入EU的ROM包4.刷入magisk面具后话 前言 教程大概就是四步&#xff0c;解锁&#xff0c;刷入rec&#xff0c;刷入系统&#xff0c;刷入面具&#xff0c;跟着教程走即可。这次是刷机方式&#xff1a;卡刷&#xff08;Recovery&a…

SELECT * 会导致查询效率低的原因

SELECT * 会导致查询效率低的原因 前言一、适合SELECT * 的使用场景二、SELECT * 会导致查询效率低的原因2.1、数据库引擎的查询流程2.2、SELECT * 的实际执行过程2.3、使用 SELECT * 查询语句带来的不良影响 三、优化查询效率的方法四、总结 前言 因为 SELECT * 查询语句会查…

PCL可视化 3D点云PCD文件

工具安装 sudo apt install pcl-tools 启动命令&#xff1a; pcl_viewer 000000.pcd

chatgpt赋能python:在Python官网上下载Python:一位有10年Python编程经验的工程师分享

在Python官网上下载Python&#xff1a;一位有10年Python编程经验的工程师分享 Python是如今最受欢迎的编程语言之一。它是一种易学易用、具有广泛用途的开源语言。如果您刚开始使用Python&#xff0c;或者想要更新到最新版本的Python&#xff0c;Python官网是一个很好的起点。…

QT学习笔记4--自定义信号的槽

逻辑&#xff1a;下课后&#xff0c;老师饿了&#xff0c;学生请吃饭。 使用connect函数连接自定义的信号和槽函数。 创建类 信号 #ifndef TEACHER_H #define TEACHER_H#include <QObject>class teacher : public QObject {Q_OBJECT public:explicit teacher(QObjec…

浙江专升本高等数学易错例题讲解-函数间断点

例题 考察内容&#xff1a;间断点的判断 易错点分析&#xff1a;化简时不能把负数带入根号 浙江专升本高等数学易错例题讲解-函数间断点

【前端1】标签,css,js

文章目录 1.标签&#xff1a;input1.1 html&#xff1a;HTML&#xff08;用于创建网页结构&#xff09;&#xff0c;CSS&#xff08;对页面进行美化&#xff09;&#xff0c;JavaScript&#xff08;用于与用户交互&#xff09;1.2 文本标签&#xff1a;字体属性1.3 a标签&#…

【动手学习深度学习--逐行代码解析合集】03图像分类数据集

【动手学习深度学习】逐行代码解析合集 03图像分类数据集 视频链接&#xff1a;B站-动手学习深度学习 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 代码 以下代码是在PyCharm中运行的 import matplotlib # 注意这个也要import一…

word整理pdf转换来的文章,或者从网页复制的格式

这是对文章的格式整理。 1、去除 分节符 首先&#xff0c;用格式工厂或者别的pdf转换器等&#xff0c;都会出现为了保持原有格式不变因此增加分节符的情况 添加分节符后&#xff0c;即使这一页还有很大的空白&#xff0c;下一段也会另起一页 而且&#xff0c;单纯的backspa…

Java+控制台实现员工信息管理系统

Java控制台实现员工信息管理系统 一、系统介绍二、功能展示1.主页2.添加员工3.员工列表4.根据员工号查询信息5.根据员工号删除信息6.根据员工号调整员工工资7.退出系统 四、其它1.其他系统实现2.获取源码 一、系统介绍 使用ArrayList对完成一个员工管理系统&#xff0c;员工信…

Flutter 实现任意控件拖动

文章目录 前言一、如何实现&#xff1f;1、使用GestureDetector响应拖动事件2、使用Transform变换控件位置3、计算拖动区域 二、完整代码三、使用示例1、基本用法 总结 前言 使用flutter开发是需要控件能拖动&#xff0c;比如画板中的元素&#xff0c;或者工具条&#xff0c;搜…

chatgpt赋能python:用Python进行数据挖掘来优化SEO排名

用Python进行数据挖掘来优化SEO排名 您是否一直在为如何在搜索引擎排名上优化自己的网站而苦恼&#xff1f;事实上&#xff0c;Python可以成为您的得力助手&#xff0c;来简化您的分析和优化过程&#xff0c;并帮助您在搜索引擎排名上获得更好的结果。 什么是SEO&#xff1f;…

tomcat与自定义类加载器

类加载器与类的”相同“判断 类加载器除了用于加载类外&#xff0c;还可用于确定类在Java虚拟机中的唯一性。 不同类加载器加载的类在 JVM 看来是两个不同的类&#xff0c;因为在 JVM 中一个类的唯一标识是 类加载器类名(包括包名)。 类加载器种类 启动类加载器&#xff0c;…

phpstorm左边变黄,页面内跳转追踪等功能不好使了

第一种方法&#xff1a;删除项目根目录中.idea文件夹(确保删除成功)&#xff0c;然后再重新打开项目即可&#xff08;这个方法对我无效&#xff09; 第二种方法&#xff1a;点击File(文件)->Repair IDE(修复IDE)&#xff0c;按照右下角的指示一步步操作即可&#xff08;这种…

华为OD机试真题 Python 实现【静态代码扫描服务】【2023Q1 100分】

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 静态扫描快速识别源代码的缺陷&#xff0c;静态扫描的结果以扫描报告作为输出&#xff1a; 文件扫描的成本和文件大小相关&#xff0c;如果文件大小为N&am…

echarts折线图背景空白太大

1、没有调间距的效果&#xff1a; 2、更改间距后的效果&#xff1a; 3、其实只要更改grid定位值就行了&#xff0c;上代码&#xff1a; grid: {top: 20px,left: 20px,right: 20px,bottom: 20px,containLabel: true},4、将代码copy到option里面就行了

【中间件】Ngnix入门

文章目录 下载地址相关概念*反向代理&#xff1a;*负载均衡&#xff1a;轮询权重轮询iphash*动静分离 文件解释/conf/nginx.conf 基本使用双击运行&#xff08;不建议&#xff09;使用命令行 常用命令&#xff08;Linux下&#xff09; 下载地址 Nginx官网下载页 相关概念 *反…

IMX8QXP SPI CS片选连续传输模式

问题背景 在开发项目中&#xff0c;换了一个spi安全芯片&#xff0c;发现不能进行通信&#xff0c;查看spi信号波形&#xff0c;时钟&#xff0c;发送数据&#xff0c;片选都是正常的&#xff0c;但没有回复数据。安全芯片技术正常通过查看CS片选波形信号&#xff0c;提出CS片选…