如何解决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
相关产品推荐
相关产品推荐

