簡體   English   中英

將 SDK 從 28 升級到 29 時發生 ClassCastException

[英]ClassCastException when upgrading SDK from 28 to 29

我對這個 function 有這個奇怪的問題。 當我以 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,導致與之前的function編譯出錯,所以我將其修復為以下一個:

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

假設

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!!))

顯然在我這邊給出錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM