Out-projection类型'ArrayList< *>'禁止使用'public open fun add(index:Int,element:E):java.util.ArrayList中定义的单位'

时间:2016-11-10 04:20:57

标签: kotlin kotlin-android-extensions kotlin-extension

我有这个片段:

-

然后我在此使用它:

+

但是我收到了这个错误:

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<*>
}
...
...
...

2 个答案:

答案 0 :(得分:25)

Kotlin star-projections不等同于Java的原始类型。 MutableList<*>中的星号(*)表示您可以安全地从列表中读取值,但您无法安全地为其写入值,因为列表中的值都是某种未知类型(例如Person,{ {1}},String或可能Number?)。它与Any?相同。

相反,MutableList<out Any?>表示您可以从列表中读取和写入任何值。值可以是相同类型(例如MutableList<Any?>)或混合类型(例如PersonPerson)。

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

答案 1 :(得分:3)

所以我必须像以下人士一样投降:

$(document).ready(function(){});

因为dataList是ArrayList&lt; *&gt;而不是ArrayList和Kotlin是严格的。