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.Adapter
types中指定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” ;)