由于kotlin中的泛型,无法实例化适配器包装器

时间:2018-06-11 15:05:38

标签: java android kotlin

由于泛型,我无法将适配器传递给适配器包装器类。这是我如何实例化它

val a = MyAdapter()
val b = AdAdapter(a)

此代码导致错误

Type mismatch: inferred type is MyAdapter but RecyclerView.Adapter
<in RecyclerView.ViewHolder> was expected

这是我的适配器

class MyAdapter: RecyclerView.Adapter<MyAdapter.VH>() {

    //Some Code Here

    class VH(itemView: View): RecyclerView.ViewHolder(itemView) {}

}

这是Adadapter

class AdAdapter(private val originalAdapter: 
                      RecyclerView.Adapter<in RecyclerView.ViewHolder>)
                      : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    //Some Code

}

1 个答案:

答案 0 :(得分:0)

https://kotlinlang.org/docs/reference/generics.html#use-site-variance-type-projections中所述,

  

Array<in String>对应于Java Array<? super String>,即您可以将CharSequence数组或Object数组传递给fill()函数

因此,在您的情况下,您需要MyAdapter成为RecyclerView.Adapter<? super RecyclerView.ViewHolder>并且它不是,因为MyAdapter.VH并不满足约束。