简体   繁体   中英

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. Because of the difference in view models' the onBindViewHolder and onCreateViewHolder methods throw NotImplementedError on the base class. Now when I want to implement the methods in the classes which inherit BaseRecyclerViewAdapter<T> , I encounter the following error:

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

How can I safely override those without encountering this error?

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
    }

Other 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. The ViewHolder in your class definition is RecyclerView.ViewHolder. The one in your function signature is your inner class. You need to specify your inner one in the class definition: BaseAdapter<String, TheAdapter.ViewHolder> to avoid the confusion. Or better yet, use a different class name for your inner class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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