[英]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.由于视图模型的差异,
onBindViewHolder
和onCreateViewHolder
方法在基础 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.