You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Kotlin中"java.util.Collections$SingletonList无法转为ArrayList"问题

Kotlin中distinct()类型转换错误的解决方法

错误原因

  • Kotlin的distinct()方法返回的是List<T>接口类型,而非具体的ArrayList<T>实现类
  • 当去重后的列表仅含单个元素时,JVM会返回java.util.Collections$SingletonList(一种轻量不可变List实现),它与ArrayList无继承关系,强制类型转换必然抛出ClassCastException

修复方案

方案1:转换为ArrayList(需使用ArrayList特有方法时)

直接通过toArrayList()或toMutableList()将distinct()返回的List转换为ArrayList:

val orgList = arrayListOf<ListArticle>()
orgList.add(list)
// 方式1:用toArrayList()直接转换
val sortedList = orgList.distinct().toArrayList()
// 方式2:先转可变List再强转(效果一致)
val sortedList = orgList.distinct().toMutableList() as ArrayList<ListArticle>

方案2:使用List接口声明变量(无需ArrayList特有方法时)

如果业务逻辑不需要依赖ArrayList的特定方法,直接用List<T>类型接收结果,避免不必要的类型转换:

val orgList = arrayListOf<ListArticle>()
orgList.add(list)
val sortedList: List<ListArticle> = orgList.distinct()

注意事项

永远不要依赖distinct()的底层返回实现进行强制类型转换,因为JDK或Kotlin标准库的内部实现可能会变化,导致代码兼容性问题。

内容的提问来源于stack exchange,提问作者Ashwin Nirmale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 22:52:13