代码之家  ›  专栏  ›  技术社区  ›  Suhaib Roomy

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

  •  -1
  • Suhaib Roomy  · 技术社区  · 6 年前

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

    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) {}
    
    }
    

    这是适配器

    class AdAdapter(private val originalAdapter: 
                          RecyclerView.Adapter<in RecyclerView.ViewHolder>)
                          : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    
        //Some Code
    
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Alexey Romanov    6 年前

    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 不满足约束。