简体   繁体   English

覆盖“顶级功能”

[英]Overriding 'top level function'

I'm trying to create a BaseRecyclerViewAdapter<T>:RecyclerView.Adapter<T> class to provide a default/common functionality for classes using generics.我正在尝试创建一个BaseRecyclerViewAdapter<T>:RecyclerView.Adapter<T> class 以为使用 generics 的类提供默认/通用功能。 Because of the difference in view models' the onBindViewHolder and onCreateViewHolder methods throw NotImplementedError on the base class.由于视图模型的差异, onBindViewHolderonCreateViewHolder方法在基础 class 上抛出 NotImplementedError。 Now when I want to implement the methods in the classes which inherit BaseRecyclerViewAdapter<T> , I encounter the following error:现在,当我想在继承BaseRecyclerViewAdapter<T>的类中实现方法时,遇到以下错误:

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

How can I safely override those without encountering this error?如何在不遇到此错误的情况下安全地覆盖那些?

Base.kt:基础.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
    }

Other class.kt:其他 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
    }
}

You've overloaded the class name ViewHolder.您已经重载了 class 名称 ViewHolder。 The ViewHolder in your class definition is RecyclerView.ViewHolder. class 定义中的 ViewHolder 是 RecyclerView.ViewHolder。 The one in your function signature is your inner class.您的 function 签名中的一个是您的内部 class。 You need to specify your inner one in the class definition: BaseAdapter<String, TheAdapter.ViewHolder> to avoid the confusion.您需要在 class 定义中指定您的内部: BaseAdapter<String, TheAdapter.ViewHolder>以避免混淆。 Or better yet, use a different class name for your inner class.或者更好的是,为您的内部 class 使用不同的 class 名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM