Java 9 的 List.of() 创建真正不可变、无 null、类型安全的只读列表,底层为优化私有类,调用修改方法抛 UnsupportedOperationException,传 null 抛 NullPointerException。

Java 9 引入了 List.of() 静态工厂方法,用于快速创建**不可变(immutable)且只读(read-only)**的列表。它底层不返回 ArrayList 或 LinkedList,而是一个高度优化的私有实现类(如 ImmutableCollections.ListN),内存占用小、创建快、线程安全。
基本用法:创建空列表或带元素的列表
语法简洁,支持零个或多个参数:
-
List.of()→ 创建空列表(类型需显式声明或通过上下文推断) -
List.of("a", "b", "c")→ 创建含 3 个字符串的不可变列表 -
List.of(1, 2, 3)→ 创建List
关键特性:不可变性与运行时限制
该列表在语义和行为上完全不可修改:
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
- 调用
add()、remove()、set()、clear()等任何修改方法,都会立即抛出UnsupportedOperationException - 不支持
null元素 —— 若传入null(如List.of("a", null)),会直接抛出NullPointerException - 返回的列表是结构不可变的:既不能增删改元素,也不能通过迭代器修改
类型推断与泛型注意事项
编译器会根据参数类型自动推断泛型,但需注意类型统一:
-
List.of(1, 2L)→ 推断为List(因int和long的最近公共父类是Number) - 若需精确类型,可用显式类型声明:
Listlist = List.of("x", "y"); - 避免混用类型导致意外的宽泛类型(如
List.of("hello", 42)推断为List)
与旧方式对比:为什么推荐用 List.of()?
相比传统方式更安全、简洁、高效:
-
Collections.unmodifiableList(Arrays.asList(...)):需多层包装,仍可能因原始列表被修改而“泄露”可变性 -
new ArrayList(Arrays.asList(...)):创建的是可变副本,不满足只读需求 -
List.of():一步到位,真正不可变,无中间对象,JVM 可做更多优化
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










