覆盖“顶层功能”

时间:2019-09-27 00:35:01

标签: android inheritance kotlin overriding

我正在尝试创建一个BaseRecyclerViewAdapter<T>:RecyclerView.Adapter<T>类,以便为使用泛型的类提供默认/通用功能。由于视图模型的差异,onBindViewHolderonCreateViewHolder方法在基类上引发NotImplementedError。现在,当我想在继承BaseRecyclerViewAdapter<T>的类中实现方法时,遇到以下错误:

Modifier 'override' is not applicable to 'top level function'

如何在不遇到此错误的情况下安全地覆盖它们?

Base.kt:

package com.example

        abstract class BaseAdapter<T, THolder: RecyclerView.ViewHolder>  (
        private val mValues: List<T>,
        private val mListener: OnFragmentInteractionListener<T>?
    )  : RecyclerView.Adapter<THolder>() {
        private val mOnClickListener: View.OnClickListener
        init {
            mOnClickListener = View.OnClickListener { v ->
                val item = v.tag as T
                mListener?.onListFragmentInteraction(item)
            }
        }

         override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): THolder {
            throw NotImplementedError()
        }

        override fun onBindViewHolder(holder: THolder, position: Int) {
            throw NotImplementedError()
        }

        override fun getItemCount(): Int = mValues.size


    //And some other fancy methods
    }

其他class.kt:

package com.example
class TheAdapter(
    private val mValues: List<Item>,
    private val mListener: OnFragmentInteractionListener<Item>?
) : BaseAdapter<Item, ViewHolder>(mValues, mListener)

//Error here
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {

    }

//Error here
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

    }

    inner class ViewHolder(val mView: View) : RecyclerView.ViewHolder(mView) {
        //ViewHolder properties and methods
    }
}

1 个答案:

答案 0 :(得分:0)

您已使类名ViewHolder重载。您的类定义中的ViewHolder是RecyclerView.ViewHolder。函数签名中的一个是您的内部类。您需要在类定义中指定内部变量:BaseAdapter<String, TheAdapter.ViewHolder>,以避免造成混淆。或者更好的是,为内部类使用不同的类名称。