前言
"很多团队升级了 JDK,代码风格却还停留在老时代。"
Java 9 到 Java 11 没有像 Java 8 那样颠覆,但它们给日常开发带来的效率提升非常直接。
这篇文章不讲大理论,只讲三个最容易落地、也最值得马上用起来的增强:集合工厂方法、var 和 String 新方法。
一、集合工厂方法:少写很多初始化样板代码
Java 9 引入了:
List.of()Set.of()Map.of()Map.ofEntries()
最常见的用法:
List<String> types = List.of("TXT", "MD", "PDF", "DOCX");
Map<String, Object> request = Map.of(
"collectionName", collectionName,
"dimension", dimension,
"metricType", "COSINE"
);
超过 10 个键值对时,用 Map.ofEntries():
Map<String, Integer> large = Map.ofEntries(
Map.entry("a", 1),
Map.entry("b", 2),
Map.entry("c", 3)
);
这些集合有什么特点
- 不可变
- 不允许
null Map.of()不允许重复 key
Map<String, String> map = Map.of("a", "1", "b", "2");
// map.put("c", "3"); // UnsupportedOperationException
如果后续还要改,先包装一层:
List<String> mutableList = new ArrayList<>(List.of("a", "b", "c"));
Map<String, Integer> mutableMap = new HashMap<>(Map.of("a", 1, "b", 2));
二、var:减少冗余,但别牺牲可读性
Java 10 引入了 var,本质是局部变量类型推断。
var name = "Hello"; // String
var count = 100; // int
var list = List.of("a", "b", "c"); // List<String>
它适合什么场景?
最适合复杂泛型或右值类型已经非常清楚的场景:
var embeddingDescriptor = modelService.resolveEmbeddingModelDescriptor(modelId);
for (var chunk : retrievalResult.chunks()) {
process(chunk);
}
不适合什么场景?
var result = process(data);
这类代码在没有上下文时可读性很差。
📌 使用建议
var只能用于局部变量、增强 for、传统 for 的索引变量等局部位置- 它不是动态类型,编译期类型早就确定了
- 能提高可读性时再用,而不是全量替换显式类型
三、String 新方法:都是小功能,但非常高频
Java 11 给 String 增加了不少实用方法,其中最常用的是这几个。
1. isBlank()
String str = " ";
str.isEmpty(); // false
str.isBlank(); // true
这个方法比 isEmpty() 更适合业务输入校验。
if (payload == null || payload.isBlank()) {
throw new BusinessException("请求体不能为空");
}
2. lines()
String text = "第一行\n第二行\n第三行";
Stream<String> lines = text.lines();
3. strip()
strip() 比 trim() 更现代,能正确处理 Unicode 空白字符。
String unicode = "\u2000hello\u2000".strip();
4. repeat()
String separator = "-".repeat(20);
四、这些增强为什么值得你马上用
因为它们都属于“几乎没有学习成本,但长期收益很高”的能力。
对比一下:
Map<String, Object> params = new HashMap<>();
params.put("collectionName", "documents");
params.put("dimension", 1536);
写成:
Map<String, Object> params = Map.of(
"collectionName", "documents",
"dimension", 1536
);
不只是更短,而是语义更明确:这就是一个初始化后不再修改的只读参数对象。
总结
Java 9 到 11 这批特性最有价值的地方,不在“新”,而在“顺手”:
- 集合工厂方法减少初始化样板代码
var减少复杂类型声明负担- String 新方法让常见文本处理更自然
如果你已经升级到较新的 JDK,这一批能力完全值得优先落地。
欢迎关注公众号 FishTech Notes,一块交流使用心得!