首页 > 其他分享 >JDK23新特性:通过原始类型模式提升代码编写效率

JDK23新特性:通过原始类型模式提升代码编写效率

时间:2024-06-10 09:00:45浏览次数:31  
标签:case JDK23 loggedIn -- 代码 switch User 编写 user

在JEP455中包含了通过增强switch语句,简化了代码编写,以及提高了代码的可读性。

1.相关优化

  • 原始类型模式:您可以int, long, boolean在模式匹配结构中直接使用原始类型(例如 等)。这样就无需对值进行不必要的装箱和拆箱。
  • 扩展的instanceof和switch :运算instanceof符和switch表达式已经扩展,可以与原始类型无缝协作。

2.示例

2.1.业务背景

以用户订单服务系统为例。

2.2.实现源码

void main() {
    var user = new User(12345L, true);  //loggedIn user
    startProcessing(OrderStatus.NEW, switch (user.loggedIn()) {
        case true -> user.id();
        case false -> {
            log("Unrecognized user");
            yield -1;
        }
    });

    user = new User(0L, false); //not loggedIn user
    startProcessing(OrderStatus.NEW, switch (user.loggedIn()) {
        case true -> user.id();
        case false -> {
            log("Unrecognized user");
            yield -1;
        }
    });
}

void startProcessing(OrderStatus orderStatus, long userId) {
    switch (userId) {
        case -1L -> System.out.println("Unrecognized User. Unable to process order.");
        default -> {
            var message = switch (orderStatus) {
                case NEW -> "Order for User %s is received and will start processing";
                case PROCESSING -> "Order for User %s is being processed.";
                case DISPATCHED, DELIVERED -> "Order for User %s has already been processed";
            };
            log(String.format(message, userId));
        }
    }
}

void log(String message) {
    println(message);
}

public enum OrderStatus {
    NEW,
    PROCESSING,
    DISPATCHED,
    DELIVERED
}

record User(long id, boolean loggedIn) {
}

2.3.源码解读

创建一个具有 ID 和loggedIn状态的 User 对象。方法内的 switch 表达式startProcessing检查用户是否已登录:

  • 如果用户已登录,则使用其 ID 进行处理;
  • 如果未登录,则生成一条日志消息,并产生 -1 以指示无法识别的用户。然后 startProcessing 方法使用另一个 switch 语句来处理不同的 OrderStatus 值。

根据订单状态打印适当的消息。

2.4.源码编译及运行

注意:这是一项预览语言功能,可通过 JDK 23 编译器和运行时的 --enable-preview 标志使用。要在 JDK 23 中尝试上述示例,您必须启用预览功能:

  • 编译程序javac --release 23 --enable-preview OrderService.java并使用 运行它 java --enable-preview OrderService;
  • 使用源代码启动器时,使用 运行程序java --enable-preview OrderService.java;
  • 当使用jshell时,用 jshell 启动它–enable-preview。

3.总结

随着 Java 的不断发展,JEP 455 等功能体现了该语言致力于实现现代化和提高开发人员生产力的承诺。利用这些变化可以编写更高效、更易读的代码,并在不断发展的 Java 开发领域保持领先地位。

标签:case,JDK23,loggedIn,--,代码,switch,User,编写,user
From: https://blog.csdn.net/nanxiaotao/article/details/139569532

相关文章

  • 【NAS】Docker Gitea+SakuraFrp+绿联DPX4800标 搭建私有代码托管平台
    本文主要分享Gitea的一些设置,和Https的实现。Gitea的一些设置映射网络HTTPS的实现先准备好一个域名,建议准备一个1Panel创建一个AC账户然后点击申请证书,手动解析。申请完毕后,点击详情,查看证书crt和私钥key自己创建一个txt文本,将证书crt粘贴进去,然后将名字改为xxx.crt......
  • 代码随想录算法训练营第六天
    哈希表常见的三种哈希结构:数组、set(集合)、map(映射)要快速判断一个元素是否出现集合里,考虑哈希法!242.有效的字母异位词题目:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。解题:......
  • Diffusers代码学习: T2I Adapter
    T2IAdapter是一款轻量级适配器,用于控制文本到图像模型并为其提供更准确的结构指导。它通过学习文本到图像模型的内部知识与外部控制信号(如边缘检测或深度估计)之间的对齐来工作。T2IAdapter的设计很简单,条件被传递到四个特征提取块和三个下采样块。这使得针对不同的条件快速......
  • 【华为OD】D卷真题100分:数组拼接 JavaScript代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、Java、C、C++、python代码实现:【华为OD】D卷真题100分:数组拼接JavaScript代码实现[思路+代码]-CSDN......
  • 请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有
    //请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。#include<stdio.h>intfun(int*a){intresult[100];intcount=0;for(inti=1;i<=100;i++){......
  • Python模拟时钟演示及源代码
     turtle是Python中的一个模块,用于绘图和图形设计。它提供了一个简单的绘图窗口,可以绘制各种形状、线条和颜色等。通过使用turtle模块,我们可以在屏幕上实时地绘制图形,并且可以控制画笔的移动、旋转等操作。 2、使用示例下面是一个简单的使用turtle模块绘制一个正方形的......
  • 代码随想录算法训练营第十四天|二叉树递归遍历、迭代遍历、统一迭代
    二叉树遍历二叉树主要有两种遍历方式:深度优先遍历:先往深走,遇到叶子节点再往回走。深度优先遍历又分:前序遍历(中、左、右)中序遍历(左、中、右)后序遍历(左、右、中)广度优先遍历:一层一层的去遍历。(后面讲)递归遍历递归三要素确定递归函数的参数和返回值:确定哪些参数是递......
  • 线程池的实现代码分析
    [toc]线程池线程池代码分析thread_pool.c#include"thread_pool.h"voidhandler(void*arg){ printf("[%u]isended.\n", (unsigned)pthread_self()); //打印自己的进程号 pthread_mutex_unlock((pthread_mutex_t*)arg); //解锁}//线程要执行的任......
  • 使用 Scapy 库编写 TCP 劫持攻击脚本
    一、介绍TCP劫持攻击(TCPHijacking),也称为会话劫持,是一种攻击方式,攻击者在合法用户与服务器之间的通信过程中插入或劫持数据包,从而控制通信会话。通过TCP劫持,攻击者可以获取敏感信息、执行未授权的操作或中断正常通信。1.1TCP劫持攻击的原理TCP劫持攻击主要利用了TCP协议的......
  • 使用 Scapy 库编写 TCP RST 攻击脚本
    一、介绍TCPRST攻击是一种拒绝服务攻击(Denial-of-Service,DoS)类型,攻击者通过伪造TCP重置(RST)包,中断目标主机与其他主机之间的TCP连接。该攻击利用了TCP协议中的重置机制,强制关闭合法的TCP连接,导致通信中断。1.1TCP重置机制TCP重置(RST)是TCP协议中的一种控制消息,用于立即终......