很多项目长期停在 Java 8,但 Java 8 之后的版本已经补了不少实用语法。它们不只是“新鲜”,更重要的是减少样板代码,让意图表达得更直接。
switch 表达式减少分支噪音
传统 switch 容易写出大量 case、break 和临时变量。新的 switch 表达式可以直接返回值,并支持多个条件合并。
String type = switch (day) {
case 1, 2, 3, 4, 5 -> "workday";
case 6, 7 -> "weekend";
default -> "invalid";
};
它适合把枚举、状态和简单分类逻辑写得更清楚。分支复杂到需要大量业务操作时,仍然应该考虑策略模式或拆方法。
文本块适合写 JSON 和 SQL
文本块使用三引号表达多行字符串,适合配置片段、JSON、SQL、HTML 模板等内容。
String json = """
{
"name": "demo",
"enabled": true
}
""";
它最大的价值是减少 \n、转义符和字符串拼接,让内容保持原本形状。写测试数据、接口样例、SQL 片段时尤其舒服。
集合工厂让小集合更简洁
Java 9 之后可以用 List.of、Set.of、Map.of 创建不可变小集合。
List<String> names = List.of("a", "b", "c");
Map<String, Integer> scores = Map.of("a", 1, "b", 2);
这类写法适合常量、测试数据和小型配置。需要可变集合时,不要误用不可变集合再在后面 add,否则会抛异常。
record 适合不可变数据载体
record 可以快速定义不可变数据载体,自动生成构造器、访问器、equals、hashCode 和 toString。
public record UserView(Long id, String name) {}
它适合 DTO、查询结果、配置项和领域里的值对象。若对象有复杂生命周期、可变状态或大量业务行为,就不一定适合 record。
var 是局部变量推导,不是弱类型
var 只能用于局部变量,编译器仍然会推导出静态类型。
var users = userService.listActiveUsers();
用得好可以减少重复类型噪音;用得过度会让代码读者猜类型。右侧表达式清晰时可以用,链式调用过长或返回类型不明显时,显式类型更好。
接口私有方法让默认方法更可维护
Java 8 引入接口默认方法后,接口里可能出现重复逻辑。后续版本允许接口私有方法,把默认方法之间的公共逻辑抽出来。
这对框架接口、SDK 扩展点比较有用。业务代码里不要把接口写成工具类,接口仍然应该表达契约。
实用结论
Java 8 之后的很多特性都在解决同一件事:让代码更接近业务意图,减少仪式感。
switch 表达式、文本块、集合工厂、record、var、接口私有方法都值得了解。迁移时不用一次性全上,先在测试、DTO、配置和清晰边界里使用,逐步形成团队习惯。




