gpt4 book ai didi

generics - Out-projected 类型 'ArrayList<*>' 禁止使用 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList'

转载 作者:IT老高 更新时间:2023-10-28 13:30:38 28 4
gpt4 key购买 nike

我有这个片段:

class RecyclerViewAdapter internal constructor(
val clazz: Class<out RecyclerViewViewHolder>,
val layout: Int,
var dataList: MutableList<*>)
...
...
...
fun RecyclerView.getDataList() : ArrayList<*> {
return (adapter as RecyclerViewAdapter).dataList as ArrayList<*>
}
...
...
...

然后我在这个上使用它:

recyclerView.getDataList().add(Person("Lem Adane", "41 years old", 0))

但我收到此错误:

Error:(19, 31) Out-projected type 'ArrayList<*>' prohibits the use of   
'public open fun add(index: Int, element: E): Unit defined in
java.util.ArrayList'

最佳答案

Kotlin star-projections不等同于 Java 的原始类型。 MutableList<*> 中的星号 (*)意味着您可以安全地从列表中读取值,但不能安全地向其写入值,因为列表中的每个值都是某种未知类型(例如 PersonStringNumber? 或可能 Any? ) .与 MutableList<out Any?> 相同.

相比之下,MutableList<Any?>意味着您可以从列表中读取和写入任何值。这些值可以是相同类型(例如 Person )或混合类型(例如 PersonString )。

在您的情况下,您可能希望使用 dataList: MutableList<Any>这意味着您可以从列表中读取和写入任何非空值。

关于generics - Out-projected 类型 'ArrayList<*>' 禁止使用 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40519921/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com