通用接口中的Out-projection类型禁止使用带有泛型参数的metod

时间:2017-08-22 11:11:43

标签: generics kotlin

我开始使用Kotlin,我定义了这样的界面:

   interface AAdapter<VH : RecyclerView.ViewHolder> {

        fun onCreateAViewHolder(parent: ViewGroup): VH

        fun onBindAViewHolder(v: VH, position: Int)
    }

当我尝试在代码上使用它时:

class Klasa (
        private val adapter: AAdapter<*>
) {

   fun doSth(){
      //... 
      val vh = this.adapter.onCreateAViewHolder(parent)
      //on below line I get error
      adapter.onBindAViewHolder(v, position)
     //...
  }

}

我收到 Out -jected type'AAdapter&lt; *&gt;'的错误禁止使用'公共抽象乐趣onBindAViewHolder(v:T,position:Int):单位

我想把“in”或“out”添加到定义中,但我很困惑。

如何允许它。

1 个答案:

答案 0 :(得分:1)

AAdapter<*>替换为AAdapter<RecyclerView.ViewHolder>

class Klasa (
        private val adapter: AAdapter<RecyclerView.ViewHolder>
) {
 // ...

因为您已声明AAdapter具有类型参数VH,其类型是RecyclerView.ViewHolder的任何子类。在类Klasa中,您有一个AAdapter的实例,它具有任何类型的类型参数。