
Java 中使用 List.of() 创建的是不可变列表,调用 add() 会抛出 UnsupportedOperationException;需改用 ArrayList 等可变集合,并注意命名规范与字面量写法。
java 中使用 `list.of()` 创建的是不可变列表,调用 `add()` 会抛出 `unsupportedoperationexception`;需改用 `arraylist` 等可变集合,并注意命名规范与字面量写法。
在 Java 中,List.of() 是 Java 9 引入的便捷工厂方法,用于创建不可修改(immutable) 的只读列表。正如其官方文档明确指出:“Returns an unmodifiable list”,这意味着一旦创建完成,任何修改操作(如 add()、remove()、set())都会触发 UnsupportedOperationException —— 这正是你遇到错误的根本原因。
要解决该问题,关键在于:先创建一个可变的 List<Long> 实例。以下是两种推荐方式:
✅ 方式一:基于 List.of() 初始化可变列表
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
// 创建可变 ArrayList,并用 List.of() 的结果初始化
List<Long> longList = new ArrayList<>(List.of(3L)); // 推荐使用 3L 而非 (long)3
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]
}
}⚠️ 注意事项
- 命名规范:Java 变量名应遵循 lowerCamelCase,因此 LongList 应改为 longList(首字母小写),避免与类名混淆。
- 字面量写法:3L 和 2L 是更简洁、更符合 Java 惯例的 long 字面量写法,优于强制类型转换 (long)3,既提升可读性,也避免潜在装箱/类型推导歧义。
- 泛型安全:List<Long> 明确限定只能存 Long 对象(自动装箱支持 long 字面量),无需额外类型检查。
? 小结
List.of() 适用于配置项、常量集合等不需变更的场景;若需动态增删元素,请始终选择 ArrayList、LinkedList 等可变实现。理解“不可变集合”的设计意图,是写出健壮、可维护 Java 集合代码的重要基础。

















