当前位置:Java -> Java 21 记录和模式匹配:掌握面向数据的编程[视频]

Java 21 记录和模式匹配:掌握面向数据的编程[视频]

在不断发展的软件开发世界中,数据发挥着核心作用。有效处理和处理数据对开发人员来说是至关重要的。作为最广泛使用的编程语言之一,Java 在 Java 21 中的最新改进中承认了面向数据的编程的重要性。两个重要的 Java Enhancement Proposals(JEPs)引人注目:JEP 440JEP 441

JEP 440: 记录模式

JEP 440 主要关注记录模式,这一特性显著增强了 Java 编程语言在数据操作方面的能力。记录模式引入了一种新的解构记录值的方式,使得数据导航和处理更加声明性和可组合。

理解记录模式

考虑一个具有用户实体和两个记录的场景:UserCreatedEventUserDeletedEvent。这些记录代表与用户活动相关的事件。

@Test
public void shouldGetEventDeleted(){
    User otaviojava = new User("otaviojava");
    Supplier<User> userSupplier = new UserDeletedEvent(otaviojava, Instant.now(), "nope reason");
    var log = log(userSupplier);
    Assertions.assertEquals(otaviojava, log.get());
}


在这个示例中,UserDeletedEvent 记录是使用特定属性创建的,包括受影响的用户、时间戳和事件原因。使用记录模式,您可以高效地解构UserDeletedEvent并访问其属性,而无需冗长的 if-else 检查。

使用记录模式解构记录

让我们深入研究一下log 方法,它展示了记录模式对数据导航的强大处理能力:

private Optional<User> log(Supplier<User> supplier){
    if(supplier instanceof UserCreatedEvent(User user, Instant instant) ){
        System.out.println("User created at " + instant + " with username " + user.username());
        return Optional of(user);
    } else if (supplier instanceof UserDeletedEvent(User user, Instant instant, String reason)) {
        System.out.println("User deleted at " + instant + " with username " + user.username() + " because " + reason);
        return Optional of(user);
    }
    return Optional.empty();
}


在这段代码中,UserCreatedEvent(User user, Instant instant)UserDeletedEvent(User user, Instant instant, String reason) 是能直接访问相应事件的用户、时间和原因属性的记录模式。这种方法更为简洁,确保您以类型安全的方式处理数据。

参考:

JEP 441: 用于开关表达式和语句的模式匹配

JEP 440 关注增强记录模式,而 JEP 441 通过将模式匹配引入开关表达式和语句,扩展了其模式匹配能力。在这种背景下,模式匹配使得能够简洁和安全地处理复杂的面向数据的查询。

使用开关表达式进行模式匹配

fireEvent 方法展示了如何有效使用开关表达式进行模式匹配:

String fireEvent(Supplier<User> supplier) {
    return switch (supplier){
        case UserCreatedEvent(var user, var instant) -> "User created at " + instant + " with username " + user.username();
        case UserDeletedEvent(var user, var instant, var reason) -> "User delete at " + instant +
                " with username " + user.username() + " because " + reason;
        default -> "No event";
    };
}


这段代码展示了在switch表达式中的模式匹配。表达式中的每个 case 指定了一个模式和相应的操作。这些模式解构了supplier对象,使得您能够直接访问用户事件记录的属性。这种方法增强了代码的可读性和可维护性,使得更容易处理复杂的数据结构。

进一步探索

要更深入地了解本文中讨论的概念和代码示例,请访问以下链接的 GitHub 代码库:Java 21 代码样本

拥抱面向数据的编程

有了 Java 21 和 JEPs 440 和 441 的引入,Java 中的面向数据的编程已经达到了新的水平。这些特性赋予开发人员更有效地处理数据的能力,增强了代码的清晰度、安全性和可维护性。

在一个以数据为核心的软件开发世界里,掌握 Java 21 中的这些面向数据的编程特性对保持行业前沿至关重要。无论您是构建涉及大量数据处理的应用程序,还是简单地追求更清晰和可读性更强的代码,JEP 440 和 JEP 441 都是每个 Java 开发人员都应该加入其工具包的工具。

拥抱记录模式和模式匹配,在 Java 21 中释放您的 Java 应用程序的全部潜力。这是迈向更加优雅和高效的面向数据的编程的一步,使得您的代码库更为强大且更易于管理。Java 21 为 Java 开发铺平了朝着更加明亮和更加数据中心的未来的道路。



推荐阅读: 25. 面向对象五大基本原则是什么

本文链接: Java 21 记录和模式匹配:掌握面向数据的编程[视频]