当前位置: 首页 > wzjs >正文

作风建设网站首页吉安县规划建设局网站

作风建设网站首页,吉安县规划建设局网站,本地网站建设电话,沭阳网站建设哪家好记录一个异常:class java.util.ImmutableCollections$ListN cannot be cast to class java.util.ArrayList (java.util.ImmutableCollections$ListN and java.util.ArrayList 文章目录 1、原因2、解决方式一3、解决方式二4、关于不可变集合的补充4.1 JDK8和9的对比4…

记录一个异常:class java.util.ImmutableCollections$ListN cannot be cast to class java.util.ArrayList (java.util.ImmutableCollections$ListN and java.util.ArrayList

文章目录

  • 1、原因
  • 2、解决方式一
  • 3、解决方式二
  • 4、关于不可变集合的补充
    • 4.1 JDK8和9的对比
    • 4.2 相关源码
    • 4.3 不可变集合的使用场景

1、原因

代码中做了类型转换,将一个不可变集合 (ImmutableCollections$ListN) 强制转换为 可变集合 (ArrayList)

List<String> immutableList = List.of("A", "B", "C"); // Java 9+ 不可变列表
ArrayList<String> mutableList = (ArrayList<String>) immutableList; // ❌ 抛出 ClassCastException

业务相关错误代码:

 List<ClusterJob> jobs = result.get().getJobs().stream().sorted(Comparator.comparing(ClusterJob::getOrderUpdateTime).reversed()).toList();
ClusterJobResponse response = new ClusterJobResponse();
response.setJobs((ArrayList<ClusterJob>) jobs);
return BaseVo.createSuccessWithData(response);

而toList方法的源码,是一个不可变集合:

default List<T> toList() {return (List<T>) Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())));}

2、解决方式一

使用 new ArrayList<>(Collection) 复制

List<String> immutableList = List.of("A", "B", "C");
ArrayList<String> mutableList = new ArrayList<>(immutableList); // ✅ 复制数据

3、解决方式二

直接使用传统的Collectors.toList()

List<ClusterJob> jobs = result.get().getJobs().stream().sorted(Comparator.comparing(ClusterJob::getOrderUpdateTime).reversed()).collect(Collectors.toList());
ClusterJobResponse response = new ClusterJobResponse();
response.setJobs((ArrayList<ClusterJob>) jobs);

4、关于不可变集合的补充

4.1 JDK8和9的对比

不可变集合(Immutable Collections)是指创建后内容不可修改的集合,任何尝试修改(add、remove、set)的操作都会抛出 UnsupportedOperationException

  • Java 8 及之前:使用 Collections.unmodifiableXXX() 做一个包装(只是视图,底层数据仍可能被修改)
  • Java 9+:新增 List.of(), Set.of(), Map.of() 等工厂方法(真正的不可变集合)
public class Main {public static void main(String[] args) {List<String> original = new ArrayList<>();original.add("A");original.add("B");List<String> unmodifiable = Collections.unmodifiableList(original);// 成功original.add("C");// UnsupportedOperationExceptionunmodifiable.add("C");}
}

如上,使用Collections.unmodifiableList包装后得到的集合,其不可被更新,但原始被包装的集合,还是可以更改

在这里插入图片描述
Java9+以后,创建不可变集合:

List<String> immutableList = List.of("A", "B", "C");  
Set<Integer> immutableSet = Set.of(1, 2, 3);  
Map<String, Integer> immutableMap = Map.of("A", 1, "B", 2);  // 空集合
List<String> emptyList = List.of();  
Map<String, Integer> emptyMap = Map.of();  

此时的集合,不可被更新,自然也不能被类型转换,如 (ArrayList) List.of(...) 会抛异常,推荐使用这种方式,内存占用更小,性能更好

4.2 相关源码

核心类:ImmutableCollections
在这里插入图片描述

throw UnsupportedOperationException在日常开发用的也很多,一个接口,不同的策略,有时候某一个实现类并不需要实现接口的某一个方法,此时可以直接抛这个异常

4.3 不可变集合的使用场景

用于定义一些存放固定值的常量或者成员变量:

public static final List<String> COUNTRIES = List.of("China", "US", "UK");
private static final Map<String, Integer> CACHE = Map.of("VIP", 100,"NORMAL", 10
);

用于防御性拷贝,List.copyOf创建不可变副本,此时,哪怕后面original被改变了,我自己还是不受影响

public void processData(List<String> original) {List<String> safeCopy = List.copyOf(original); // 创建不可变副本// 安全使用 safeCopy
}

当然,以下这个写法也行

List<String> original = new ArrayList<>();
List<String> listNew = new ArrayList<>(original);

new ArrayList<>(original)List.copyOf(original) 都会创建独立副本,后续对 original 的修改不会影响副本,区别是:前者返回的一个可变集合,后者则是一个严格的不可变集合

http://www.dtcms.com/wzjs/818113.html

相关文章:

  • 示范高校建设网站商城平台系统下载
  • 网站强制分享链接怎么做的进入兔展网站做PPt
  • 网站建设师薪资成都房产网站建设
  • a5源码网站学会网页设计找什么工作
  • 做感恩网站的图片素材wordpress 标签html代码
  • 网站不备案打不开黄页app下载
  • 南京网站制作工具网站建设宗旨是什么
  • flash个人网站首页模板wordpress织梦帝国
  • 学校网站建设报价表广西南宁公司网站制作
  • 投资做网站电子商务平台开发内容
  • 网站建设规划书范文5000字中国建设银行黑龙江支行官方网站
  • 青岛做网站公小程序怎么开发自己的
  • 有了主机和域名后如何做网站手机销售网站怎么做的
  • 网站免费建站 图标网站建设seo优化价格
  • 网站开发+兼职挣钱吗网站建设评比
  • 美食网站页面设计源代码企业网站建站元素
  • 怎么制作一个自己的网站前端页面设计网站
  • 泰安建站哪家好国内三大oa系统
  • 做网站apache如何筑巢网站建设
  • 网络维护人员企业网站优化兴田德润优惠
  • 纯静态网站页面优化网站租用服务器
  • 沈阳专业网站seo推广外销网站建立
  • ckplayer网站根目录系统开发软件
  • 住房和城乡建设部网站31号文tpshop开源商城
  • 昆明专业网站建设模板关键词推广系统
  • 网站建设大赛无锡哪里有网站建设便宜些的
  • 做网站做wordpress中rss插件
  • 怎么做化妆品网站内容规划博客网站开发
  • 金融电子商务网站建设怎么组建企业网站
  • o2o生鲜电商平台有哪些小程序seo排名