拥抱现代Java:记录与密封类的实用指南

简介: 拥抱现代Java:记录与密封类的实用指南

拥抱现代Java:记录与密封类的实用指南

如果你对Java的印象还停留在冗长的getter/setter和匿名内部类,那么你错过了很多精彩。现代Java(特别是LTS版本如Java 17、21)引入了众多提升开发体验和代码质量的新特性。今天,我们来探讨两个改变游戏规则的特性:记录(Record)和密封类(Sealed Class)。

1. 记录:不可变数据的透明载体

我们常常需要创建一个类,仅仅是为了承载数据,如DTO或数据库查询结果。传统的Java类需要编写大量模板代码:字段、构造器、getter、equals()hashCode()toString()

记录类让这一切变得极其简洁:

public record User(String name, String email) {
   }

一行代码!编译器会自动为我们生成:

  • 所有字段的final引用。
  • 一个规范的构造器。
  • 所有字段的访问器(name(), email())。
  • equals()hashCode()toString()方法。

记录是不可变的,这天然适用于函数式编程和多线程环境,确保了数据状态的安全。

2. 密封类:受控的继承层次

传统的类继承是开放的,任何人都可以继承一个public class。这可能导致不可控的扩展和脆弱的设计。密封类通过明确规定哪些类可以继承它,来解决这个问题。

public sealed interface Shape permits Circle, Rectangle, Triangle {
   
    double area();
}

public final class Circle implements Shape {
    /* ... */ }
public non-sealed class Rectangle implements Shape {
    /* ... */ }
public final class Triangle implements Shape {
    /* ... */ }

通过sealed关键字和permits子句,我们精确控制了只有CircleRectangleTriangle可以实现Shape接口。结合switch模式匹配,我们可以写出安全且优雅的代码:

// 预览特性,但代表了未来方向
double area = switch(shape) {
   
    case Circle c -> Math.PI * c.radius() * c.radius();
    case Rectangle r -> r.length() * r.width();
    // 无需default,因为所有情况已枚举!
};

结语

记录和密封类共同协作,让我们能以更声明式、更安全的方式来建模数据和处理逻辑。它们减少了模板代码,增强了编译时检查,并使得代码意图更加清晰。是时候升级你的JDK,将这些现代特性融入到你的项目中了!

相关文章
|
1月前
|
安全 Java API
超越基础:每个Java开发者都应了解的三个现代特性
超越基础:每个Java开发者都应了解的三个现代特性
231 118
|
26天前
|
大数据 Python
Python列表推导式:优雅与效率的完美结合
Python列表推导式:优雅与效率的完美结合
218 114
|
1月前
|
机器学习/深度学习 弹性计算 网络协议
阿里云服务器ECS c9i实例收费价格:2核4G、4核8G和8核16G优惠配置整理
阿里云ECS计算型c9i实例,2核4G、4核8G、8核16G享优惠价,搭载Intel Xeon处理器,主频3.2GHz,适用于Web服务、机器学习等场景,ESSD云盘,网络性能强劲,限时活动价格低至181.73元/月。
228 95
|
4天前
|
安全 PHP 开发者
告别混乱:用PHP 8的Match表达式优雅地简化你的条件逻辑
告别混乱:用PHP 8的Match表达式优雅地简化你的条件逻辑
148 113
|
4天前
|
安全 PHP
PHP 8.1枚举:告别数组常量的新时代
PHP 8.1枚举:告别数组常量的新时代
145 113
|
11天前
|
弹性计算 Prometheus Cloud Native
从CPU到RPS:HPA避坑指南,让弹性伸缩不再“空转”
从CPU到RPS:HPA避坑指南,让弹性伸缩不再“空转”
161 115
|
26天前
|
PHP C语言 开发者
告别循环!用这些PHP数组函数提升你的代码效率
告别循环!用这些PHP数组函数提升你的代码效率
231 115
|
1月前
|
监控 安全 Cloud Native
永不信任,始终验证:零信任架构入门
永不信任,始终验证:零信任架构入门
187 112
|
16天前
|
JavaScript 安全 IDE
用 TypeScript 告别“无法读取未定义属性”的噩梦
用 TypeScript 告别“无法读取未定义属性”的噩梦
151 112
|
16天前
|
JavaScript 前端开发 IDE
TypeScript:为你的JavaScript系上“安全带”
TypeScript:为你的JavaScript系上“安全带”
188 112

热门文章

最新文章