Kotlin对于抽象泛型视图持有者的类应使用一种类型实参 [英] Kotlin One type argument expected for class for abstract generic view holder
本文介绍了Kotlin对于抽象泛型视图持有者的类应使用一种类型实参的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建具有以下内容的RecyclerView.Adapter:
I'm trying to create a RecyclerView.Adapter with the following:
abstract class BaseSettingsViewHolder<T>(var viewDataBinding :
ViewDataBinding) : RecyclerView.ViewHolder(viewDataBinding.root) {
abstract fun onBind(data: T, presenter: ISettingsPresenter, position: Int)
}
class SettingsTitleViewHolder(viewDataBinding: ViewDataBinding) : BaseSettingsViewHolder<TitleData>(viewDataBinding) {
override fun onBind(data: TitleData, presenter: ISettingsPresenter, position: Int) {
viewDataBinding.setVariable(BR.titleData, data)
viewDataBinding.setVariable(BR.itemPosition, position)
viewDataBinding.setVariable(BR.settingsPresenter, presenter)
viewDataBinding.executePendingBindings()
}
}
在尝试声明适配器时:
class SettingsAdapter(var context: Context, var presenter: ISettingsPresenter) : RecyclerView.Adapter<BaseSettingsViewHolder>() {
我在以下位置收到类需要一种类型的参数"的编译错误:
I'm getting "One type argument expected for class" compile error on the:
RecyclerView.Adapter<BaseSettingsViewHolder>
感谢帮助!
推荐答案
1-如果始终使用 SettingTitleViewHolder ;
1- If you use always SettingTitleViewHolder;
RecyclerView.Adapter<SettingTitleViewHolder>
2-如果要使用任何扩展了 BaseSettingViewHolder 的类;
2- If you want to use any class which extended BaseSettingViewHolder;
RecyclerView.Adapter<BaseSettingsViewHolder<*>>
3-使用任何对象类型
RecyclerView.Adapter<BaseSettingsViewHolder<Any>>
4-对适配器类使用扩展类型参数
4- Use extended type parameter for adapter class
class SettingsMenuAdapter<T>:RecyclerView.Adapter<T> where : BaseSettingViewHolder<*>
5-定义抽象类类型参数.
5- Define out for abstract class type parameter.
abstract class BaseSettingsViewHolder<out T> RecyclerView.Adapter<BaseSettingsViewHolder<Any>>
7-阅读该文章=> 科特林的仿制药" ;)
7- Read that article => "Generics in Kotlin" ;)
这篇关于Kotlin对于抽象泛型视图持有者的类应使用一种类型实参的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文