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

在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 开发领域保持领先地位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值