代码对比
✕ Java 8
// Verbose error class
public class ErrorResponse {
private final int code;
private final String message;
// constructor, getters, equals,
// hashCode, toString...
}
✓ Java 16+
public record ApiError(
int code,
String message,
Instant timestamp
) {
public ApiError(int code, String msg) {
this(code, msg, Instant.now());
}
}
发现此代码有问题? 告诉我们。
为什么现代方式更好
简洁
用 3 行而非 30 行定义错误类型。
不可变
错误响应在创建后无法修改。
可组合
error record 可以嵌套并与模式匹配配合使用。
旧方式
Map 或冗长的类
现代方式
错误 record
自 JDK
16
难度
中级
JDK 支持
基于 record 的错误响应
可用
自 JDK 16 起广泛可用(2021 年 3 月)
工作原理
record 非常适合错误响应——它们是不可变的,内置 equals/hashCode/toString,并且只需一行定义。非常适合 API 错误、验证结果和失败上下文。
相关文档