Kotlin抽象通用视图持有者的一类types的争论

我试图创建一个RecyclerView.Adapter与以下内容:


查看持有人 – 提供了抽象的父母和一个儿子

abstract class BaseSettingsViewHolder(var viewDataBinding : ViewDataBinding) : RecyclerView.ViewHolder(viewDataBinding.root) { abstract fun onBind(data: T, presenter: ISettingsPresenter, position: Int) } 

 class SettingsTitleViewHolder(viewDataBinding: ViewDataBinding) : BaseSettingsViewHolder(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() { 

我得到了“类预期的一类参数”编译错误:

 RecyclerView.Adapter 

感谢帮助!

您应该在RecyclerView.Adaptertypes中指定BaseSettingsViewHolder的types参数。

与Java不同,Kotlin没有原始types,所以你不能简单的省略types参数。

最接近原始types的概念是star-projectedtypes :在RecyclerView.Adapter>使用BaseSettingsViewHolder<*> ,这将意味着BaseSettingsViewHolder的types参数是未知的。

1-如果你总是使用SettingTitleViewHolder ;

 RecyclerView.Adapter 

2-如果你想使用扩展BaseSettingViewHolder的任何类;

 RecyclerView.Adapter> 

3-使用任何对象types

 RecyclerView.Adapter> 

4-使用适配器类的扩展types参数

 class SettingsMenuAdapter>:RecyclerView.Adapter 

5-定义抽象types参数。

 abstract class BaseSettingsViewHolder RecyclerView.Adapter> 

7-阅读文章=> “Kotlin的generics” ;)