我已將此代碼轉換為可變串列。但由于某種原因,它仍然將其顯示為串列。這是我的代碼
return (stringToArray(userSharedPrefs.getString(MY_KEY, null))?.toMutableList()?.distinct()?.reversed() ?: mutableListOf<String>())
但是得到了這個錯誤
Type mismatch.
Required:
MutableList<String>
Found:
List<String>
為什么說Found: List<String>
uj5u.com熱心網友回復:
distinct()
并reversed()
回傳新串列,而不是 MutableLists。你需要把這些電話放在toMutableList()
后面。
return (stringToArray(userSharedPrefs.getString(MY_KEY, null))?.distinct()?.reversed()?.toMutableList() ?: mutableListOf<String>())
但是,如果您能夠將回傳型別更改為 List,那么無論如何都遵循從函式回傳只讀 List 的慣用模式會更加穩健。此函式在完成后不需要串列是可變的。消費者可以決定是否需要 MutableList 并toMutableList()
在需要時使用。
另外,要澄清術語。toMutableList()
不強制轉換為 MutableList。它將內容復制到一個新的 MutableList 中。鑄造具有非常特定的含義。這意味著讓編譯器將物件實體視為不同的型別,而不更改被參考的實體。復制到 MutableList 是安全的,但強制轉換(使用as MutableList
)是不安全的,并且可能在運行時崩潰。即使安全地轉換為 MutableList withas? MutableList
實際上也是不安全的,因為當您嘗試對其進行變異時,Kotlin 標準庫中使用的一些 MutableList 會引發運行時例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/508438.html
上一篇:查找陣列中的資料并將其映射在一起