Kotlin泛型抽象类

时间:2017-11-03 10:16:26

标签: android generics kotlin

我在Kotlin有一个抽象课:

abstract class SimpleRecyclerAdapter<VH : SimpleRecyclerAdapter.Holder, D> constructor(
     context: Context, 
     var data: MutableList<D>
): RecyclerView.Adapter<VH>() {

    //inner class inside main
    abstract class Holder constructor(view: View) : RecyclerView.ViewHolder(view) {}
}

一切正常,但我的内部班Holder没有看到D类和outer变量的data参数

如果我将Holder类标记为inner类,则:

abstract inner class Holder constructor(view: View) : RecyclerView.ViewHolder(view) {}

D参数现在可见,但这里

SimpleRecyclerAdapter<VH : SimpleRecyclerAdapter.Holder, D>

我收到错误"2 type arguments expected for class..." 在这里RecyclerView.Adapter<VH> "expected RecyclerView.ViewHolder, found VH" - 似乎VH不可见。 我哪里错了?我在D类中需要一个inner参数,但是使用内部关键字它不起作用。

1 个答案:

答案 0 :(得分:1)

要修复添加inner修饰符时遇到的错误,需要在内部类中指定外部类的类型参数&#39;使用网站:

abstract class SimpleRecyclerAdapter<VH : SimpleRecyclerAdapter<VH, D>.Holder, D> 
                                                               ^^^^^^^

完整的代码:

abstract class SimpleRecyclerAdapter<VH : SimpleRecyclerAdapter<VH, D>.Holder, D> (
    context: Context,
    var data: MutableList<D>
): RecyclerView.Adapter<VH>() {

    //inner class inside main
    abstract inner class Holder constructor(view: View) : RecyclerView.ViewHolder(view) {
        fun foo(d: D) = Unit // D is visible here
    }
}