【问题标题】:ClassCastException when upgrading SDK from 28 to 29将 SDK 从 28 升级到 29 时出现 ClassCastException
【发布时间】:2021-06-27 02:55:21
【问题描述】:

这个函数有个奇怪的问题。当我以 SDK 28 为目标时,没有问题,也没有发生崩溃。这是目标 SDK 28 的工作代码。

  override fun getChildList(): List<Any> {
        val itemsWithSubCats: MutableList<in Any> = ArrayList(items)
        if (subCategories?.isNotEmpty() == true) {
            itemsWithSubCats.add(ArrayList<Any>(subCategories))
        }
        return itemsWithSubCats.toList() as List<Any>
    }

我已将发布版本上传到 Playstore,但我遇到了升级 SDK 问题。于是我升级到了29 SDK,导致上一个函数编译出错,所以我把它修复成如下:

override fun getChildList(): List<Any> {
    val itemsWithSubCats: MutableList<in Any?> = mutableListOf(items)
    if (subCategories?.isNotEmpty() == true) {
        itemsWithSubCats.add(ArrayList<Any>(subCategories!!))
    }
    return itemsWithSubCats.filterNotNull().toList()
}

导致 ClassCastException 如下:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to ..RestaurantDetailsMenuItem

【问题讨论】:

    标签: java android kotlin collections classcastexception


    【解决方案1】:

    假设

    items = arrayOf("a", "b")
    subCategories = arrayOf("c", "d")
    

    如果你想实现 itemsWithSubCats = listOf("a", "b", "c", "d"), 那么代码应该是这样的:

    val itemsWithSubCats: MutableList<in Any?> = items.toMutableList()
    if (subCategories?.isNotEmpty() == true) {
       itemsWithSubCats.addAll(subCategories!!)
    }
    val list = itemsWithSubCats.filterNotNull().toList()
    

    如果你想实现 itemsWithSubCats = listOf(arrayOf("a", "b"), arrayOf("c", "d")), 那么代码应该是这样的:

    val itemsWithSubCats: MutableList<in Any?> = mutableListOf(items)
    if (subCategories?.isNotEmpty() == true) {
        itemsWithSubCats.add(subCategories!!)
    }
    val list = itemsWithSubCats.filterNotNull().toList()
    

    在 Android Studio 中,行

    itemsWithSubCats.add(ArrayList<Any>(subCategories!!))
    

    显然是我这边出错了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多