
Java 中使用 List.of() 创建的是不可变列表,调用 add() 会抛出 UnsupportedOperationException;需改用 ArrayList 等可变集合实现,同时注意命名规范和字面量写法。
java 中使用 `list.of()` 创建的是不可变列表,调用 `add()` 会抛出 `unsupportedoperationexception`;需改用 `arraylist` 等可变集合实现,同时注意命名规范和字面量写法。
在 Java 中,List.of(E...) 是 Java 9 引入的便捷工厂方法,用于创建不可修改(unmodifiable) 的不可变列表。正如官方文档明确指出:“Returns an unmodifiable list”,这意味着一旦创建,其内容无法通过 add()、remove()、set() 等方法变更——任何修改尝试都会触发 UnsupportedOperationException。
你遇到的错误正是源于此:
List<Long> longList = List.of(3L); // ✅ 创建不可变列表 longList.add(2L); // ❌ 抛出 UnsupportedOperationException
✅ 正确做法:使用可变列表容器
要支持动态增删元素,必须使用可变(mutable)的 List 实现类,最常用的是 ArrayList。以下是两种推荐写法:
方式一:基于 List.of() 初始化后转为 ArrayList
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
// 先创建不可变列表,再包装为可变 ArrayList
List<Long> longList = new ArrayList<>(List.of(3L));
longList.add(2L); // ✅ 成功添加
System.out.println(longList); // 输出: [3, 2]
}
}方式二:直接初始化空 ArrayList 并逐个添加
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Long> longList = new ArrayList<>();
longList.add(3L);
longList.add(2L);
System.out.println(longList); // 输出: [3, 2]
}
}? 提示:使用 3L 和 2L 而非 (long)3 是更简洁、更符合 Java 惯例的 long 字面量写法,避免冗余强制类型转换。
⚠️ 其他重要注意事项
- 命名规范:Java 变量名应遵循 lowerCamelCase(小驼峰),如 longList,而非 LongList(后者易被误认为类名);
- 类型安全:List<Long> 明确声明泛型类型,确保编译期类型检查,避免装箱/拆箱意外;
- 性能考量:若初始容量已知,建议使用 new ArrayList<>(initialCapacity) 避免多次扩容。
✅ 总结
| 场景 | 推荐方式 |
|---|---|
| 需要后续修改(增/删/改) | 使用 new ArrayList<>(...) 或 new ArrayList<>() |
| 仅读取、不修改(如配置常量) | 可继续使用 List.of(...),兼顾简洁与安全性 |
牢记:List.of() = 不可变;可变操作 → 必须选用 ArrayList、LinkedList 等可变实现类。

















